js实现环形菜单效果
点击中间的圆点,会弹出环形菜单,效果图:

代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript ring menu</title>
<style media="screen">
.plus{
position: relative;
}
.plus::after,.plus::before {
position: absolute;
content: '';
display: inline-block;
border: 1px solid silver;
opacity: 0.8;
}
.plus::before {
width: 11px;
height: 1px;
left: 11px;
top: 16px;
}
.plus::after {
width: 1px;
height: 11px;
left: 16px;
top: 11px;
}
.ring {
width: 10px;
height: 10px;
position: relative;
display: inline-block;
padding: 1em;
font-size: 12px;
border-radius: 50% 50%;
box-shadow: 1px 1px 5px 0 rgba(89,167,255,0.5);
}
.ring:hover{
box-shadow: 1px 1px 5px 0 rgba(89,167,255,0.8);
}
.circle {
position: absolute;
cursor: pointer;
padding: 0.8em 0.5em;
display: inline-block;
border-radius: 50% 50%;
border: 1px solid rgba(89,167,255,0.2);
box-shadow: 1px 3px 40px 0 rgba(89,167,255,0.3);
overflow: hidden;
word-break: keep-all;
transition: left 0.5s linear,
top 0.5s linear,
color 0.5s linear,
background-color 0.5s linear,
box-shadow 0.5s linear;
}
.circle:hover{
color: #fff;
background-color: rgba(89,167,255,0.8);
box-shadow: 1px 3px 40px 0 rgba(89,167,255,1);
z-index: 100;
}
.ring.selected > .circle {
display: inline-block;
opacity: 1;
z-index: 10;
}
.node-hide {
width: 0px;
height: 0px;
opacity: 0;
left: calc( 30% ) !important;
top: calc( 30% ) !important;
}
</style>
</head>
<body>
<div class="ring">
<div class="circle">
属性
</div>
<div class="circle">
事件
</div>
<div class="circle">
类型
</div>
<div class="circle">
关联
</div>
<div class="circle">
更多
</div>
</div>
</body>
<script type="text/javascript">
var data = [
{title:'属性'},
{title:'事件'},
{title:'类型'},
{title:'关联'}
];
/**
* R 可以考虑通过传参动态设置
**/
function initRing(ctn, data) {
initByData(data); var items = ctn.querySelectorAll('.circle'),
R = 50, // 圆半径
angle = 360 / (items.length),
offsetX = getStyle(ctn).width / 2, // 中心点x轴偏移值
offsetY = getStyle(ctn).height / 2; // 中心点y轴偏移值
Array.from(items).map(function(item, index) {
var dw = getStyle(item).width / 2,
dh = getStyle(item).height / 2;
// 计算菜单坐标
var hudu = (2 * Math.PI / 360) * angle * index,
left = (Math.cos(hudu) * R + offsetX - dw).toFixed(2),
top = (Math.sin(hudu) * R + offsetY - dh).toFixed(2); item.style.setProperty('left', left + 'px');
item.style.top = top + 'px';
item.classList.add('node-hide');
}); ctn.addEventListener('click', function() {
var cls = Array.from(this.classList),
ctnr = this,
items = Array.from(ctnr.querySelectorAll('.circle'));
if (cls.includes('selected')) {
this.classList.remove('selected');
items.map(function(item) {
item.classList.add('node-hide');
});
} else {
this.classList.add('selected');
items.map(function(item) {
item.classList.remove('node-hide');
});
}
event.stopPropagation();
}); function initByData(data) {
if (data) {
data.map(function(item) {
var divDom = document.createElement('div');
divDom.classList.add('circle');
divDom.innerText = item.title;
ctn.appendChild(divDom);
});
}
} function getStyle(domObj) {
var style = document.defaultView.getComputedStyle(domObj);
var width = style.width.replace('px', '') * 1 + style['padding-left'].replace('px', '') * 1 + style['padding-right'].replace('px', '') * 1,
height = style.height.replace('px', '') * 1 + style['padding-top'].replace('px', '') * 1 + style['padding-bottom'].replace('px', '') * 1;
return {
width: width,
height: height
};
}
}
initRing(document.querySelector('.ring'),data)
</script>
</html>
js实现环形菜单效果的更多相关文章
- js实现收缩菜单效果
废话不多说,直接上代码: 有注释 <head> <title></title> <style type="text/css"> di ...
- 原生JS通过勾股定理计算苹果菜单效果
JS原生苹果菜单效果 知识点: 勾股定理 a²+b²=c² Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息会被临时存储到一个指定的地方,也就是event对象,以方便我们在需 ...
- 原生JS实现苹果菜单
今天分享下用原生JS实现苹果菜单效果,这个效果的重点有以下几点 图标中心点到鼠标的距离的算法 利用比例计算图标的宽度 代码地址:https://github.com/peng666/blogs/blo ...
- 适合移动手机使用的js环形菜单特效插件
blooming-menu是一款适合在移动手机上使用的js环形菜单插件.该环形菜单提供了众多的參数,通过结合CSS3动画制作出效果很炫酷的圆形菜单展开和隐藏动画效果. 以下是这个圆形菜单菜价的可用參数 ...
- jQuery Wheel 环形菜单插件5种效果演示
很酷的菜单-jQuery Wheel 环形菜单插件5种效果演示在线预览 下载地址 实例代码 <div class="container"> <!-- Top Na ...
- 用js枚举实现简易菜单效果
用js枚举实现简易菜单效果,左侧显示菜单,右侧显示用户选择的菜单,一图胜千言,还是直接来张效果图吧: 以下是代码: <DOCTYPE html> <html> <head ...
- Js实现京东无延迟菜单效果(demo)
一个端午节,外面人山人海,又那么热,我认为宅在家里看看慕课网,充实自己来的实际... 这是一个js实现京东无延迟菜单效果,感觉很好,分享给大家... 1.开发基本的菜单结构 2.开发普通的二级菜单效果 ...
- js下拉框二级关联菜单效果代码具体实现
这篇文章介绍了js下拉框二级关联菜单效果代码具体实现,有需要的朋友可以参考一下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- Js实现京东无延迟菜单效果(demo) 慕课网
先来理清思路:1.开发基本的菜单结构 2.开发普通的二级菜单效果 3.假如延迟解决移动问题 切换子菜单时候,用setTimeout设置延迟 debounce去抖技 在事件被频繁触发是,只执行一次处理 ...
随机推荐
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
- lucene笔记
lucene全文检索 全文检索是计算机程序通过扫描文章中的每一个词, 对每一个词建立一个索引, 指明该词在文章中出现的次数和位置. 当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程
- Django 的认识,题型
Django 的认识,面试题 链接:https://www.cnblogs.com/chongdongxiaoyu/p/9403399.html 1. 对Django的认识? #1.Django是走大 ...
- Mac IntelliJ IDEA 2017(java开发集成环境)附注册码和破解教程 v2017.3.5破解版
原文:http://www.orsoon.com/Mac/155938.html 原文中含有软件下载地址 软件介绍 IntelliJ IDEA 2017 Mac激活版是Mac平台上的一款java开发集 ...
- 优化-最小化损失函数的三种主要方法:梯度下降(BGD)、随机梯度下降(SGD)、mini-batch SGD
优化函数 损失函数 BGD 我们平时说的梯度现将也叫做最速梯度下降,也叫做批量梯度下降(Batch Gradient Descent). 对目标(损失)函数求导 沿导数相反方向移动参数 在梯度下降中, ...
- Centos + Maven + Jenkins
下载 JDKwget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-secureback ...
- Netty编解码技术
编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化. 虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序 ...
- leetcode输入输出加速
C++兼容C的输入输出,即cin与scanf混用文件指针不会出错,cout亦同,导致cin有额外开销. 可以用std::ios::sync_with_stdio(false);手动关闭. cin.ti ...
- JDK1.5 Excutor 与ThreadFactory
Excutor 源码解读: /** * An object that executes submitted {@link Runnable} tasks. This * interface provi ...
- Java使用点滴
1.查找某个字符在字符串中第几次出现的位置 /** * 查找某个字符在字符串中第几次出现的位置 * @param string 要匹配的字符串 * @param i 第几次出现 * @param ch ...