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 相关文章推荐
网页设计常用的一些技巧
Dec 22 Javascript
符合标准的js表单提交的代码
Sep 13 Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
Jan 11 Javascript
JS隐藏参数post传值实例
Apr 18 Javascript
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
Apr 22 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
Dec 15 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 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
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
laravel自定义分页效果
2017/07/23 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python random模块用法解析及简单示例
2017/12/18 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python快排算法详解
2019/03/04 Python
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
行政管理专业求职信
2014/07/06 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
党员个人自我评价
2015/03/03 职场文书
小学校长个人总结
2015/03/03 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
推广普通话主题班会
2015/08/17 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
python3实现常见的排序算法(示例代码)
2021/07/04 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
如何Python使用re模块实现okenizer
2022/04/30 Python