javascript - 如何在 JavaScript 中旋转跟随光标的图像?

标签 javascript jquery html

我有跟随鼠标光标的图像。

HTML:

<img id="cow" src="https://icons.iconarchive.com/icons/gakuseisean/ivista-2/128/Alarm-Arrow-Right-icon.png" height="30px" width="30px" style="position: absolute; top: 50%; left: 50%;"/> 

Javascript:

var mouseXY = {};
$( document ).on( "mousemove", function( event ) {
  mouseXY.X = event.pageX; 
  mouseXY.Y = event.pageY;
});
var iCow = $("#cow");
var cowInterval = setInterval(function()
{
  var cowXY = iCow.position();
  var diffX = cowXY.left - mouseXY.X;
  var diffY = cowXY.top - mouseXY.Y;
  var newX = cowXY.left - diffX / 1000;
  var newY = cowXY.top - diffY / 1000;
  iCow.css({left: newX, top: newY});
}, 10);

JSFiddle example

如何让图片沿光标方向旋转?
我尝试用 transform: rotate():

来做到这一点
var cowInterval = setInterval(function()
{
  var cowXY = iCow.position();
  var diffX = cowXY.left - mouseXY.X;
  var diffY = cowXY.top - mouseXY.Y;
  var newX = cowXY.left - diffX / 1000;
  var newY = cowXY.top - diffY / 1000;
  var tan = diffX / diffY;
  var atan = Math.atan(tan);
  iCow.css({left: newX, top: newY, transform: "rotate(" +((-1)*atan - Math.PI/2)+ "rad)"});
}, 10);

但没有成功

最佳答案

在更改光标位置时,您只需要更改 transform(rotate) css 属性,请记住,光标实际上改变了位置。

添加这两个if-else条件,使图片向正确的方向旋转

 if(diffY > 0 && diffX > 0) {

    atan += 180; 
  }
 else if(diffY < 0 && diffX > 0) {

    atan -= 180;
  }

我想这就是你想要的。

var mouseXY = {};
    $( document ).on( "mousemove", function( event ) {
      mouseXY.X = event.pageX; 
      mouseXY.Y = event.pageY;
    });
    var iCow = $("#cow");
    var prevXY = {X: null, Y: null};
    var cowInterval = setInterval(function()
    {
    
      
      if(prevXY.Y != mouseXY.Y || prevXY.X != mouseXY.X && (prevXY.Y != null || prevXY.X != null)) {
      
      var cowXY = iCow.position();
      var diffX = cowXY.left - mouseXY.X;
      var diffY = cowXY.top - mouseXY.Y;
      var tan = diffY / diffX;
     
      var atan = Math.atan(tan)* 180 / Math.PI;;
       if(diffY > 0 && diffX > 0) {
      
      	atan += 180; 
      }
      else if(diffY < 0 && diffX > 0) {
      
      	atan -= 180;
      }
      
      prevXY.X = mouseXY.X;
      prevXY.Y = mouseXY.Y;
      iCow.css({transform: "rotate(" + atan + "deg)"});
    }
    }, 10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img id="cow" src="https://icons.iconarchive.com/icons/gakuseisean/ivista-2/128/Alarm-Arrow-Right-icon.png" height="30px" width="30px" style="position: absolute; top: 50%; left: 50%;"/>

关于javascript - 如何在 JavaScript 中旋转跟随光标的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572125/

相关文章:

javascript - 重新初始化时,计数变量不会在 javascript 中重置

javascript - Ember.js map 操作 keyUp 事件

jquery - 为什么我的对象在使用 css 淡出后又再次显示?

php - 只选择 Javascript 中的一些复选框

javascript - 带有 javascript window.location 的 html 表单不起作用

javascript - 带有图标的基础可切换侧边栏,如 Wordpress 仪表板

javascript - require.js 模块内的递归函数

javascript - 从嵌套私有(private)函数中设置全局变量

javascript - 如何自动关闭 Bootstrap 4 下拉菜单中的子菜单

javascript - 如何获取当前 collection_select 选择的字符串值