2013-05-28 23 views
6

Tôi đã sau chức năng jQuery mà gây nên aTestEvent() khi người dùng cuộn ngang qua 500 pixel:jQuery - Scroll Chức năng Giữ Triggering: Chỉ khi hãy

jQuery(document).scroll(function(){ 
    if(jQuery(this).scrollLeft() >= 500){ 
      aTestEvent(); 
}}); 

Dưới đây là vấn đề: Tôi chỉ muốn aTestEvent() được kích hoạt một lần ! Tuy nhiên, mỗi khi người dùng cuộn trở lại đầu trang và sau đó lại quá 500 pixel, aTestEvent() được kích hoạt lại.

Làm cách nào để chúng tôi có thể điều chỉnh mã ở trên để trình kích hoạt chỉ xảy ra lần đầu tiên người dùng cuộn qua 500 pixel?

Trả lời

14

Bạn có thể sử dụng onoff phương pháp:

$(document).on('scroll', function() { 
    if($(this).scrollLeft() >= 500) { 
     $(document).off('scroll'); 
     aTestEvent(); 
    } 
}); 

http://jsfiddle.net/3kacd/

Xin lưu ý: Đoạn mã này có thể "tắt" tất cả các sự kiện cuộn có sẵn trên một trang cụ thể nhưng để di chuyển ra khỏi cuộn chỉ nhằm mục đích xử lý mà không làm phiền các trình xử lý cuộn khác, chúng ta có thể sử dụng một vùng tên. Không gian tên tương tự như các lớp CSS ở chỗ chúng không phân cấp; chỉ một tên cần khớp.

$(document).on('name1.scroll', function() { 
    if($(this).scrollLeft() >= 500) { 
     $(document).off('name1.scroll'); 
     aTestEvent(); 
    } 
}); 

http://jsfiddle.net/shekhardtu/3kacd/57/

+0

Đó hiện các trick! Cảm ơn nhiều. Sẽ chấp nhận một lần tôi có thể. – tehSUPERADMIN

+0

@tehSUPERADMIN Bạn được chào đón. – undefined

+0

Một thủ thuật tiện dụng khác là phương thức .one() ít được biết đến hơn. http://api.jquery.com/one/ Rất hữu ích mỗi lần trong một thời gian, nhưng nó sẽ không làm việc về mặt kỹ thuật cho điều này vì câu lệnh if() - nó sẽ chỉ cháy một lần, ngay cả khi điều kiện if sai. –

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