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 相关文章推荐
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
Jul 10 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
Bootstrap基本插件学习笔记之按钮(21)
Dec 08 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
使用Vue组件实现一个简单弹窗效果
Apr 23 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
React 使用Hooks简化受控组件的状态绑定
Mar 18 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
react基本安装与测试示例
Apr 27 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
PHPEXCEL 使用小记
2013/01/06 PHP
理解JavaScript中的事件
2006/09/23 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
js实现简单扫雷
2020/11/27 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python实现类继承实例
2014/07/04 Python
python中global用法实例分析
2015/04/30 Python
python动态网页批量爬取
2016/02/14 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
用Python配平化学方程式的方法
2019/07/20 Python
python实现飞机大战小游戏
2019/11/08 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Python如何对齐字符串
2020/07/30 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
党员大会主持词
2014/04/02 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
2015年调度员工作总结
2015/04/30 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python