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 动态访问JSon元素示例代码
Aug 30 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
JS实现太极旋转思路分析
Dec 09 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
深入理解Angularjs中$http.post与$.post
May 19 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
Nov 10 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php中用foreach来操作数组的代码
2011/07/17 PHP
php中执行系统命令的方法
2015/03/21 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python发腾讯微博代码分享
2014/01/10 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
详解flask表单提交的两种方式
2018/07/21 Python
tensorflow如何批量读取图片
2019/08/29 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
毕业自我鉴定
2013/11/05 职场文书
管理站站长岗位职责
2013/11/27 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书