滚动时禁用单击功能

时间:2014-01-15 14:43:59

标签: jquery ajax

嘿我想在滚动后禁用点击功能,但它不起作用:/

针对此问题的任何解决方案?谢谢!

$(window).scroll(function() { 
    if ($(this).scrollTop() < 200)
    {
        $("#treest, #treest2, #treest3").click(function() {anim10();});
    } 
    else
    {     
       $("#treest, #treest2, #treest3").off('click')); 
    }
});

2 个答案:

答案 0 :(得分:3)

你应该使用:

 $("#treest, #treest2, #treest3").click(function() {
 if ($(window).scrollTop() < 200)
 anim10();
 });

答案 1 :(得分:1)

每次滚动窗口时都会附加新的单击事件侦听器,这就是您的示例无效的原因。

相反,请尝试这样:

var $collection = $("#treest").add("#treest2").add("$treest3");
$(window).scroll(function() { 
    if ($(this).scrollTop() > 200) {
       // Removes click event listener
       $collection.off('click')); 
    }
    else {
       // Check if a click event listener is attached, and if not, attaches a new one
       if(!$collection.data('events').click.length) {
           $collection.click(function() {
               anim10();
           });
       }
    }
});

此外,每次滚动窗口并附加/分离单击事件侦听器时,不是执行几十个函数调用,而是将单击侦听器保留在那里,并在每次调用时验证它(如@Milind所有在他的回答中建议:

var $collection = $("#treest").add("#treest2").add("$treest3");
$collection.click(function() {
    if ($(window).scrollTop() <= 200)
        anim10();
    });