如何在条件中包装mousemove jQuery事件?

时间:2014-02-12 23:17:11

标签: javascript jquery

我正在探索从我的网站过滤机器人流量的一些不同方法。不幸的是,由于许多这些更复杂的机器人都可以执行JavaScript,因此我从谷歌分析中排除机器人流量的许多旧技巧都不再适用。

我的一个想法是使用jQuery仅在文档上检测到鼠标移动时触发页面视图,如下所示:

var counter = 0;
if(counter === 0){
          $(document).mousemove(function(event){
               alert("Fire an event to GA here");
               counter += 1;  
          }
     );
}

这确实会在鼠标移动时触发警报,但不幸的是,即使警报已经触发一次,警报也会继续弹出。我的另一个问题是,我想在它被触发后禁用事件处理程序,因为mousemove对用户来说可能是资源密集型的。

这可能吗?除了mousemove之外还有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

您对计数器的使用已被破坏,但在触发后,无需将mousemove事件处理程序附加到文档中。尝试使用one绑定事件,以便它只执行一次:

$(document).one("mousemove", function(event){
    alert("Fire an event to GA here");
});

答案 1 :(得分:1)

$(document).on('mousemove', function(){
    alert("GA triggered");
    $(document).off('mousemove');
});

答案 2 :(得分:0)

你很亲密。您只需将if()置于绑定之外即可将其反转。

同时查看jQuery的unbind()

var counter = 0;
$(document).mousemove(function(event){
      if(counter === 0){
           alert("Fire an event to GA here");
           counter += 1;  
           $(document).unbind( "mousemove" );
      }
});

答案 3 :(得分:0)

使用一个(jquery documentation

所以这对你的代码看起来像这样:

$(document).one('mousemove',function(){
alert("Fire an event to GA here");
       counter += 1;  
});