Bạn có thể tính toán vận tốc vuốt và cố gắng tìm hiểu xem động lượng sẽ xảy ra dựa trên giá trị ngưỡng nào đó. Tôi đã thực hiện một số thử nghiệm và khoảng 0,25 pixel/ms có vẻ là một giá trị tốt.
Lưu ý: Đôi khi việc di chuyển động lượng cũng sẽ xảy ra với vận tốc thấp hơn. Tốc độ thấp nhất để làm cho động lượng cuộn mà tôi ghi lại là 0,13 (với thời gian đồng bằng rất ngắn) vì vậy nếu bạn cần một giải pháp hoàn hảo 100%, hãy tiếp tục tìm kiếm.
Mã ví dụ cũng phát hiện và giao dịch với quá trình ghi đè.
Sử dụng JQuery;
var scrollWrapper = $('#myWrapper');
var starTime, startScroll, waitForScrollEvent;
scrollWrapper.bind('touchstart', function() {
waitForScrollEvent = false;
});
scrollWrapper.bind('touchmove', function() {
startTime = new Date().getTime(); startScroll = scrollWrapper.scrollTop();
});
scrollWrapper.bind('touchend', function() {
var deltaTime = new Date().getTime() - startTime;
var deltaScroll = Math.abs(startScroll - scrollWrapper.scrollTop());
if (deltaScroll/deltaTime>0.25
|| scrollWrapper.scrollTop()<0
|| scrollWrapper.scrollTop()>scrollWrapper.height()) {
// will cause momentum scroll, wait for 'scroll' event
waitForScrollEvent = true;
}
else {
onScrollCompleted(); // assume no momentum scroll was initiated
}
startTime = 0;
});
scrollWrapper.bind('scroll', function() {
if (waitForScrollEvent) {
onScrollCompleted();
}
});
Điều này thật tuyệt vời! Tôi đã đấu tranh để tạo ra một div nội bộ có thể cuộn được, và bằng cách cho phép động lượng, tất cả logic logic tôi đã đi ra ngoài cửa sổ. Bạn đang thiếu một vài dấu phẩy và biến trình bao bọc không được xác định. Nếu không nó là tuyệt vời! – Chris
Rất vui khi bạn thấy nó hữu ích. Cảm ơn bạn đã chỉ ra các lỗi. – dagge
rất đẹp. tạo một bản trình diễn cho nó. nó có thể hữu ích cho những người khác kiểm tra kết quả nhanh chóng –