首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.mousemove更有效

.mousemove更有效
EN

Stack Overflow用户
提问于 2011-08-04 06:26:22
回答 3查看 930关注 0票数 1

在网页中,每当指针靠近<div>的边缘时,我想显示一些菜单。我可以使用.mousemove,检查位置和显示/隐藏菜单时,指针是在指定的距离。

正如jQuery手册所述:

请记住,每当鼠标指针移动时,就会触发mousemove事件,即使是像素。这意味着可以在很短的时间内生成数百个事件。

是否有一些简洁的方法来检测游标是否与边缘处于指定的距离,而不涉及资源消耗的.mousemove?我想到了一些不可见的<div>并在那里捕获了.mouseenter(),但是这样的div将与其他元素重叠,并会阻止其他事件从这些元素中分离出来。

EN

回答 3

Stack Overflow用户

发布于 2011-08-04 06:37:20

参见下面的代码,该代码可用于计算div和鼠标指针之间的距离。

代码语言:javascript
复制
(function() {

    var mX, mY, distance,
        $distance = $('#distance span'),
        $element  = $('#element');

    function calculateDistance(elem, mouseX, mouseY) {
        return Math.floor(Math.sqrt(Math.pow(mouseX - (elem.offset().left+(elem.width()/2)), 2) + Math.pow(mouseY - (elem.offset().top+(elem.height()/2)), 2)));
    }

    $(document).mousemove(function(e) {
        mX = e.pageX;
        mY = e.pageY;
        distance = calculateDistance($element, mX, mY);
        $distance.text(distance);
    });

})();

单击此处获取更多信息

票数 1
EN

Stack Overflow用户

发布于 2011-08-04 06:31:24

看看mouseentermouseleave事件,它们比mousemovemouseenter组合要好。

票数 0
EN

Stack Overflow用户

发布于 2012-04-18 21:23:36

解决这个问题的方法之一是,我基本上编写了一个生产者/消费者解决方案,其中mousemove事件是生产者,而计时器是使用者。一些未经测试的代码如下所示:

代码语言:javascript
复制
var pos = []
var old_pos = []
$(document).mousemove(function(e) {
    pos = [e.pageX, e.pageY]
    // do something else here?
});
setInterval(function(){
    // do something with the fact that mouse has moved from old_pos to pos;
    old_pos = [pos[0], pos[1]];
}, 100);

就我个人而言,我发现即使我将间隔时间设置为10毫秒,每次setInterval触发mousemove仍然会触发3次,因此它节省了大量的计算,而10 is对于快节奏的动作来说是足够短的(1000 is =1秒,所以10 is= 100帧每秒)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6937040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档