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 相关文章推荐
JQuery1.6 使用方法三
Nov 23 Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
JS实现模仿微博发布效果实例代码
Dec 16 Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 Javascript
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
vue框架搭建之axios使用教程
Jul 11 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
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
如何在PHP中生成随机数
2020/06/04 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
jQuery 使用手册(六)
2009/09/23 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
Python全排列操作实例分析
2018/07/24 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
Python 学习教程之networkx
2019/04/15 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
给女朋友的道歉信
2014/01/10 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
2014年文员工作总结
2014/11/18 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
JS实现简单九宫格抽奖
2022/06/28 Javascript