【问题标题】:How to increase speed of mousemove/clientX/Y and applying a transform?如何提高 mousemove/clientX/Y 的速度并应用转换?
【发布时间】:2020-09-07 12:03:29
【问题描述】:

我已经建立了一个 WordPress 主题。我遇到了一个网站,它创建了一个 div 来跟随用户的光标。当用户将鼠标悬停在按钮或链接上时,div 会平滑放大。

我想将这个不错的功能添加为可选功能。

我在网页上添加了一个 div,#ambition_cursor 并添加了一些基本样式。 div 现在显示为一个蓝色圆圈。圆圈的位置固定在网站的左上角。可以通过添加 CSS translate 属性来更改位置。

我设法使它与以下代码一起工作:

var ambition_cursor =  document.getElementById("ambition_cursor");

function ambition_mouse(e) {

    var ambition_cursor_x = e.clientX;     // Get the horizontal coordinate
    var ambition_cursor_y = e.clientY;     // Get the vertical coordinate 

    var ambition_cursor_pos = `translate(${ambition_cursor_x}px, ${ambition_cursor_y}px)`;
    ambition_cursor.style.transform = ambition_cursor_pos;
}

window.addEventListener('mousemove', ambition_mouse);

这里最大的缺点是滞后 (?)。有相当大的延迟,尤其是在快速移动鼠标时。你可以试试on this site。我也把情况放在a JSFiddle;虽然延迟并没有真正发生在那里。

我还没有应用太多样式(默认光标是可见的,因此您可以更好地了解实际位置)。在我花很多时间之前,我首先希望它能够更好地工作。

如何提高这个速度,让 div 位置更准确地跟随鼠标?我是初学者,所以我真的不知道应该进行哪些 JavaScript 优化。

当前代码是 JavaScript,但 jQuery 也是一种选择。

非常感谢!

更新:example how it looks on my computer.

【问题讨论】:

    标签: javascript jquery mouseevent addeventlistener mousemove


    【解决方案1】:

    页面上的所有元素都应用了过渡。删除/覆盖此样式,延迟消失(已测试)。

    【讨论】:

      【解决方案2】:

      作为 Joseph Atkinson 出色回答的替代方案:

      var ambition_cursor =  document.getElementById("ambition_cursor");
      
          function ambition_mouse(e) {
          
              ambition_cursor.style.left = e.clientX + 'px';     // Get the horizontal coordinate
              ambition_cursor.style.top = e.clientY + 'px' ;     // Get the vertical coordinate 
          }
          
          window.addEventListener('mousemove', ambition_mouse);
      

      见:https://levelup.gitconnected.com/use-javascript-to-make-an-element-follow-the-cursor-3872307778b4

      【讨论】:

        【解决方案3】:

        我访问了站点示例,破解了开发控制台,发现 throttled(20, vision_mouse) 不是性能问题,解决方法是不扼杀事件。它太顺利了,不可能是一个性能问题,这给了我第一个线索,它必须是一个意外/故意的效果。

        【讨论】:

        • 您好约瑟夫,感谢您查看!我后来添加了节流,作为一种可能的解决方案,因为我认为它比没有它更顺畅,所以我把它留在那里。我现在删除了限制,但不幸的是它仍然存在..你介意再看一下吗?
        • 在您的 JSFiddle 中,点跟随光标而没有(几乎)延迟。你不想要那个?
        • 嗨@Karlan,是的,这就是我想要的。但问题在于,该点在更大的网页上确实有延迟,例如野心主题.com/preview。我在问题中添加了一个指向 GIF 的链接,它在我的计算机上的外观..
        • @ralphsmit ek,对不起。应该已经测试过了。任何软件工程师的著名遗言。当遇到错误时,它确实有助于删除所有可能影响它的变量,从而加快我的调试速度。防止我养成像假设这样的坏习惯。如果你拿起我放下的东西,请帮助我。
        • 没问题,可以想象调试不是自己编写的代码会有点困难 ;-) 无论如何,感谢您的快速帮助!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2020-11-03
        • 2022-01-14
        • 2010-12-01
        • 1970-01-01
        相关资源
        最近更新 更多