小红点绕圆转动 百分比

7 篇文章 0 订阅

//009__circle-seekbar 
//鼠标圆形 拽
  // <div id='app'>
  //   <div class="container">
  //     <div class="circle">0</div>
  //     <!-- 小红点绕圆转动 百分比 -->
  //     <div class="circle-bar"></div> 
  //     <!-- 小红点 -->
  //   </div>
  // </div>

; (function (w, doc) {
  const oBox = doc.querySelector('.container');
  const oCircle = oBox.querySelector('.circle');
  const oBar = doc.querySelector('.circle-bar');
  const oCircleHalfR = 320 / 2;
  const oCircleBorder = 10;
  const oBarHalfR = 30 / 2;
  function init() {
    let isDrag = false;
    let mouse_offset = {
      x: 0,
      y: 0
    }
    oBar.addEventListener('mousedown', e => {
      isDrag = true;
      mouse_offset = getMouseOffset(e)
    }, false)
    w.addEventListener('mousemove', e => {
      if (!isDrag) {
        return
      }
      mouse_offset = getMouseOffset(e)
      const radian = Math.atan2(mouse_offset.y, mouse_offset.x);
      const r = (oCircleHalfR - oCircleBorder / 2);
      const x = Math.cos(radian) * r;
      const y = Math.sin(radian) * r;
      oBar.style.left = oCircleHalfR + x - oBarHalfR + 'px';
      oBar.style.top = oCircleHalfR - (y + oBarHalfR) + 'px';
      updateContent(radian)
    }, false)
    w.addEventListener('mouseup', e => {
      isDrag = false
    }, false)


    function updateContent(radian) {
      let angle = radian * (180 / Math.PI);
      console.log(angle);
      if (angle >= -180 && angle < 90) {
        angle = 90 - angle;
      } else {
        angle = 360 - (angle - 90)
      }
      oCircle.textContent = Math.floor(angle)
    }

    function getMouseOffset(e) {
      const mouse_offsetX = e.clientX - oBox.offsetLeft - oCircleHalfR;
      const mouse_offsetY = - (e.clientY - oBox.offsetTop - oCircleHalfR);
      return {
        x: mouse_offsetX,
        y: mouse_offsetY
      }
    }

  }
  init()
})(window, document)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值