js实现圆形菜单选择器


Posted in Javascript onDecember 03, 2020

本文实例为大家分享了js实现圆形菜单选择器的具体代码,供大家参考,具体内容如下

js实现圆形菜单选择器

js实现圆形菜单选择器

代码:

<head>
  <style>
    .mask{
      position: absolute;
      width: 502px;
      height: 252px;
      left:300px;
      top:350px;
      background: white;
      z-index: 999;
    }
    .con {
      width: 500px;
      height: 500px;
      overflow: hidden;
      position: absolute;
      border-radius: 100%;
      border: 1px solid black;
      user-select: none;
      cursor: pointer;
      left: 300px;
      top: 100px;
    }
 
    .con>div {
      position: absolute;
      width: 250px;
      height: 250px;
      /* border:1px solid black; */
      top: 0;
      left: 125px;
      text-align: center;
      font-size: 16px;
      transform-origin: bottom center;
    }
 
    .con1 {
      width: 400px;
      height: 400px;
      /* background: yellow; */
 
      overflow: hidden;
      position: absolute;
      border-radius: 100%;
      border: 1px solid black;
      user-select: none;
      cursor: pointer;
      left: 350px;
      top: 150px;
    }
 
    .con1>div {
      position: absolute;
      width: 200px;
      height: 200px;
      /* border:1px solid black; */
      top: 0;
      left: 100px;
      text-align: center;
      font-size: 16px;
      transform-origin: bottom center;
    }
  </style>
  <meta name="viewport"
    content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
</head>
 
<body>
  <div class="mask"></div>
  <div class="con">
  </div>
  <div class="con1">
  </div>
  <script>
    conRender();
    conRender1();
    function conRender() {
      var con = document.querySelector(".con");
      var len = 16;
      var deg = 360 / len;
      for (var i = 0; i < len; i++) {
        var dom = document.createElement("div");
        dom.style.transform = "rotate(-" + i * deg + "deg)";
        dom.innerHTML = "财务管理" + i;
        dom.setAttribute("index", i)
        con.appendChild(dom)
      }
      var mouseDown = false;
      var startX = 0;
      var startY = 0;
      var endX = 0;
      var endY = 0;
      var rotate = 0;
      con.addEventListener("mousedown", function (e) {
        mouseDown = true;
        startX = e.pageX;
        startY = e.pageY;
      }, false);
      con.addEventListener("mousemove", function (e) {
        if (mouseDown) {
          endX = e.pageX;
          endY = e.pageY;
          var distance = Math.sqrt(Math.pow((endX - startX), 2) + Math.pow((endY - startY), 2))
          if (endX - startX < 0 || endY - startY < 0) {
            distance = -distance
          }
          rotate += distance
          con.style.transform = "rotate(" + (rotate / 4) + "deg)";
          startX = e.pageX;
          startY = e.pageY;
          var index = Math.round((rotate / 4) / deg);
          var cons = document.querySelectorAll(".con>div")
          for (var i = 0, len = cons.length; i < len; i++) {
            cons[i].style.color = "black"
          }
          document.querySelector("div[index=\"" + index % len + "\"]").style.color = "red"
          document.querySelector(".con1").style.transform = "rotate(" + (rotate) + "deg)";
        }
      }, false);
      document.addEventListener("mouseup", function (e) { mouseDown = false; }, false);
 
    }
    function conRender1() {
      var con = document.querySelector(".con1");
      var len = 13;
      var deg = 360 / len;
      for (var i = 0; i < len; i++) {
        var dom = document.createElement("div");
        dom.style.transform = "rotate(-" + i * deg + "deg)";
        dom.innerHTML = "财务管理" + i;
        dom.setAttribute("index1", i)
        con.appendChild(dom)
      }
      var mouseDown = false;
      var startX = 0;
      var startY = 0;
      var endX = 0;
      var endY = 0;
      var rotate = 0;
      con.addEventListener("mousedown", function (e) {
        mouseDown = true;
        startX = e.pageX;
        startY = e.pageY;
      }, false);
      con.addEventListener("mousemove", function (e) {
        if (mouseDown) {
          endX = e.pageX;
          endY = e.pageY;
          var distance = Math.sqrt(Math.pow((endX - startX), 2) + Math.pow((endY - startY), 2))
          if (endX - startX < 0 || endY - startY < 0) {
            distance = -distance
          }
          rotate += distance
          con.style.transform = "rotate(" + (rotate / 4) + "deg)";
          startX = e.pageX;
          startY = e.pageY;
          var index = Math.round((rotate / 4) / deg);
          var cons = document.querySelectorAll(".con1>div")
          for (var i = 0, len = cons.length; i < len; i++) {
            cons[i].style.color = "black"
          }
          document.querySelector("div[index1=\"" + index % len + "\"]").style.color = "red"
        }
      }, false);
      document.addEventListener("mouseup", function (e) { mouseDown = false; }, false);
 
    }
  </script>
</body>
 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Javascript 相关文章推荐
javascript实现的像java、c#之类的sleep暂停的函数代码
Mar 04 Javascript
js 文件引入实现代码
Apr 23 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
jquery移动节点实例
Jan 14 Javascript
理解javascript对象继承
Apr 17 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 #Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 #Vue.js
微信小程序实现首页弹出广告
Dec 03 #Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 #Javascript
基于javascript实现放大镜特效
Dec 03 #Javascript
javascript实现时钟动画
Dec 03 #Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 #Javascript
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
PHP用户指南-cookies部分
2006/10/09 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python学习笔记之os模块使用总结
2014/11/03 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python实现二维数组输出为图片
2018/04/03 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
好家长事迹材料
2014/01/23 职场文书
机关出纳岗位职责
2014/04/03 职场文书
租房合同协议书
2014/04/09 职场文书
小学运动会口号
2014/06/07 职场文书
2014年防汛工作总结
2014/12/08 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
表扬信范文
2015/05/04 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL