执行后禁用

时间:2015-10-07 14:14:07

标签: javascript jquery

我有2个活动

首先:

$(window).on("scroll", function() {
    if (($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top){
        circle();
        $(window).off("scroll");
    }
});

第二

$(window).on("scroll", function() {
if($(window).scrollTop() > 0){
  $('.nav2').fadeIn('slow');
  $('.nav1').fadeOut('fast');
}else{
  $('.nav2').fadeOut('fast');
  $('.nav1').fadeIn('slow');
}
});

执行后我需要禁用的第一个事件。但我需要做第二次活动。

3 个答案:

答案 0 :(得分:5)

您可以将event namespace添加到第一个事件,然后按名称空间将其禁用:

$(window).on("scroll.once", function() {
    ...
    $(window).off("scroll.once");

答案 1 :(得分:2)

如果要在执行后“禁用”事件您可以使用Jquery .one()

.one()方法与.on()完​​全相同,只是处理程序在第一次调用后未绑定

$(window).one("scroll", function() {
   //doSomething
});

如果您正在寻找一种方法在某些条件后禁用某些事件回调并且不禁用所有这些回调您可以添加Event Namespace作为@antyrat回答

答案 2 :(得分:2)

如果条件$.Callbacks("once")返回true,请尝试使用circle最多拨打($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top

    var callbacks = $.Callbacks("once");

    callbacks.add(circle);

    var scroller = function() {
          if ($(window).scrollTop() > 0) {
            $('.nav2').fadeIn('slow');
            $('.nav1').fadeOut('fast');
          } else {
            $('.nav2').fadeOut('fast');
            $('.nav1').fadeIn('slow');
          }
       }

    $(window).on("scroll", function() {
        if (($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top) {
            callbacks.fire()
        } 
        scroller()

    });