2015-10-07 15 views
5

tôi có 2 sự kiệnvô hiệu hóa sau khi thực hiện nó

Đầu tiên:

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

Thứ hai:

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

Sự kiện đầu tiên tôi cần phải vô hiệu hóa sau khi thực hiện nó. Nhưng tôi cần phải làm việc một sự kiện thứ hai.

Trả lời

5

Bạn có thể thêm event namespace đến sự kiện đầu tiên và vô hiệu hóa nó sau đó bởi namespace bất cứ nơi nào bạn muốn:

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

Cảm ơn nhiều! –

+2

Ai đó có thể giải thích cho tôi về sự bỏ rơi của mình? – antyrat

2

Nếu bạn muốn "vô hiệu hóa" một sự kiện sau khi thực hiện nó Bạn có thể sử dụng Jquery .one()

Các .one() phương thức giống hệt với .on(), ngoại trừ việc trình xử lý không bị ràng buộc sau lần gọi đầu tiên

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

Nếu bạn đang tìm kiếm g kiếm một cách để vô hiệu hóa gọi lại sự kiện nhất định sau khi điều kiện nhất định và không vô hiệu hóa tất cả trong số họ Bạn có thể thêm Event Namespace như @antyrat trả lời

+0

Tôi đoán nó sẽ dừng sau khi bắt đầu cuộn trong trường hợp đó. Nhưng OP muốn dừng nó chỉ khi nó chạm vào điều kiện cụ thể – antyrat

+0

@antyrat có, bạn nói đúng nhưng câu hỏi OP không rõ ràng về điều đó, anh ta nói cụ thể 2 lần rằng sự kiện cần phải bị vô hiệu hóa sau khi thực thi;). – ecarrizo

2

Hãy thử sử dụng $.Callbacks("once") gọi circle cùng một lúc nhất nếu tình trạng ($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top trả về true

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() 

    }); 
+0

Bạn có chắc chắn nó sẽ không dừng ngay sau khi sự kiện cuộn cửa sổ bắt đầu? Ví dụ: nếu '$ (this) .scrollTop()' sẽ trở thành từ 0 đến 1 và điều kiện sẽ không được thực hiện, mọi thứ sẽ bị hỏng – antyrat

+0

@antyrat Xem bài đăng cập nhật – guest271314

+0

hành vi sai, 'scroller' sẽ hoạt động nhưng' circle() 'sẽ không thực thi. – antyrat

Các vấn đề liên quan