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 相关文章推荐
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
Jun 23 Javascript
jQuery中parents()方法用法实例
Jan 07 Javascript
JavaScript中操作字符串小结
May 04 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
Feb 05 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
Mar 13 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
vue父组件异步获取数据传给子组件的方法
Jul 26 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 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中文分词的简单实现代码分享
2011/07/17 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP多维数组排序array详解
2017/11/21 PHP
JavaScript 继承使用分析
2011/05/12 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
Prototype框架详解
2015/11/25 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
python实现的简单抽奖系统实例
2015/05/22 Python
Java分治归并排序算法实例详解
2017/12/12 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
python3 深浅copy对比详解
2019/08/12 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python如何定义有可选参数的元类
2020/07/31 Python
python 如何对logging日志封装
2020/12/02 Python
PHP如何设置和取得Cookie值
2015/06/30 面试题
母亲追悼会答谢词
2014/01/27 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
我的理想演讲稿
2014/04/30 职场文书
安全横幅标语
2014/06/09 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
工作表扬信范文
2015/01/17 职场文书
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS