javascript - jQuery Compass - 在光标位置旋转的箭头

标签 javascript jquery html css

我试图在 HTML 和 jQuery 中创建一个“罗盘式”圆圈,其中箭头旋转到圆圈的新部分,具体取决于用户光标所在的位置。

我有非常基本的设置,但是我有一个由旋转和 CSS 过渡引起的小错误。在您尝试在最后一部分和第一部分之间移动之前,一切看起来都很好,因为旋转是从更高的数字跳到 -45。

我认为我需要根据用户光标方向(即 90 * (oldSection - newSection) - 粗略地说)来增加或减少度数。 但是我在思考逻辑时遇到了麻烦。谁能阐明实现预期效果的最简单、最顺利的方法?

我的代码可以在 http://jsbin.com/qaxikafixa/ 看到- 或以下...


HTML

<div class="compass_container">
  <a id="square-1" class="square" href=""></a>
  <a id="square-2" class="square" href=""></a>
  <a id="square-3" class="square" href=""></a>
  <a id="square-4" class="square" href=""></a>
  <span class="arrow"></span>
</div>

CSS

.compass_container {
  position: absolute;
  width: 300px;
  height: 300px;
  display: inline-block;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  -webkit-border-radius: 50%;
  overflow: hidden;
}

.compass_container .square {
  background-color: red;
  display: inline-block;
  width: 50%;
  height: 150px;
  float: left;
}

.compass_container .square:nth-child(2) {
  background-color: blue;
}

.compass_container .square:nth-child(3) {
  background-color: green;
  float: right;
}

.compass_container .square:nth-child(4) {
  background-color: orange;
}

.arrow {
  width: 0;
  height: 0;
  position: absolute;
  top: calc(50% - 30px);
  left: calc(50% - 20px);
  border-bottom: 60px solid white;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
  transform: rotate(320deg);
-webkit-transition: transform .25s ease;
     -moz-transition: transform .25s ease;
      -ms-transition: transform .25s ease;
       -o-transition: transform .25s ease;
          transition: transform .25s ease;
  }

Javascript

jQuery(document).ready(function($) {

  $(window).on('mousemove', function(event) {

    var mouseX = event.pageX;
    var mouseY = event.pageY;

    var arrow = $('.arrow');

    if (mouseX > $('#square-2').offset().left) {

      if (mouseY > $('#square-4').offset().top) {

        $(arrow).css({
          transform: 'rotate(135deg)'
        });

      } else {

        $(arrow).css({
          transform: 'rotate(45deg)'
        });

      }

    } else {

      if (mouseY > $('#square-3').offset().top) {

        $(arrow).css({
          transform: 'rotate(-135deg)'
        });

      } else {

        $(arrow).css({
          transform: 'rotate(-45deg)'
        });

      }

    }

  });

});

最佳答案

我在javascript中做了一些修改。

请看这个例子:http://jsfiddle.net/kevalbhatt18/dvpss800/

var img = $('.arrow');
if(img.length > 0){
    var offset = img.offset();
    function mouse(evt){
        var center_x = (offset.left) + (img.width()/2);
        var center_y = (offset.top) + (img.height()/2);
        var mouse_x = evt.pageX; var mouse_y = evt.pageY;
        var radians = Math.atan2(mouse_x - center_x, mouse_y - center_y);
        var degree = (radians * (180 / Math.PI) * -1) + 90; 
        img.css('-moz-transform', 'rotate('+degree+'deg)');
        img.css('-webkit-transform', 'rotate('+degree+'deg)');
        img.css('-o-transform', 'rotate('+degree+'deg)');
        img.css('-ms-transform', 'rotate('+degree+'deg)');
    }
    $(document).mousemove(mouse);
}

关于javascript - jQuery Compass - 在光标位置旋转的箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241675/

相关文章:

javascript - 将 knockout 中的数据发送到 php

javascript - JavaScript 中的多个阅读更多/更少按钮

javascript - 检查 iOS 主页安装 - HTML5

javascript - 如何将数组附加到现有的 json javascript?

javascript - React.js 的 this.setState() 是同步还是异步?

JavaScript 数组搜索之间的日期时间

Javascript 在执行下一行之前不等待函数完成

javascript - 两个条件始终为 true 的循环

javascript - 如何在 wordpress 中使页脚宽度负责(主题二十十三)

javascript - 必须从三个不同的 HTML 表单中获取数量,并计算总价。我究竟做错了什么?