Đây là một cách rất đơn giản để ngăn chặn sự lan truyền không có plugin, chỉ jQuery.
Cập nhật: Mã đã được cập nhật để hoạt động chính xác trong IE9 +. Chưa được thử nghiệm trong các phiên bản trước.
Trước tiên, hãy tạo một lớp học trên <div>
để đánh dấu nó là có hành vi này. Trong ví dụ của tôi, tôi sử dụng lớp học .Scrollable
.
<div class="Scrollable">
<!-- A bunch of HTML here which will create scrolling -->
</div>
Các jQuery để vô hiệu hóa là:
$('.Scrollable').on('DOMMouseScroll mousewheel', function(ev) {
var $this = $(this),
scrollTop = this.scrollTop,
scrollHeight = this.scrollHeight,
height = $this.height(),
delta = (ev.type == 'DOMMouseScroll' ?
ev.originalEvent.detail * -40 :
ev.originalEvent.wheelDelta),
up = delta > 0;
var prevent = function() {
ev.stopPropagation();
ev.preventDefault();
ev.returnValue = false;
return false;
}
if (!up && -delta > scrollHeight - height - scrollTop) {
// Scrolling down, but this will take us past the bottom.
$this.scrollTop(scrollHeight);
return prevent();
} else if (up && delta > scrollTop) {
// Scrolling up, but this will take us past the top.
$this.scrollTop(0);
return prevent();
}
});
Về bản chất, điều này làm là để phát hiện hướng di chuyển đã được yêu cầu trong (dựa trên originalEvent.wheelDelta
: dương = up
, tiêu cực = down
). Nếu được yêu cầu delta
của sự kiện mousewheel
sẽ di chuyển qua top
hoặc bottom
của số <div>
, hãy hủy sự kiện.
Trong IE, đặc biệt, di chuyển các sự kiện đi qua khu vực có thể cuộn của phần tử con, sau đó cuộn lên phần tử cha và cuộn tiếp tục bất kể sự kiện bị hủy. Bởi vì chúng ta hủy bỏ sự kiện trong mọi trường hợp, và sau đó kiểm soát việc di chuyển trên con thông qua jQuery, điều này được ngăn chặn.
Điều này dựa trên cách thức mà this question giải quyết vấn đề, nhưng không yêu cầu plugin và trình duyệt chéo tương thích với IE9 +.
Here is a working jsFiddle thể hiện mã đang hoạt động.
Here is a working jsFiddle thể hiện mã đang hoạt động và được cập nhật để hoạt động với IE.
Here is a working jsFiddle thể hiện mã đang hoạt động và được cập nhật để hoạt động với IE và FireFox. Xem this post để biết thêm chi tiết về sự cần thiết của những thay đổi.
nó là rất giống nhau, nhưng tôi ghét các giải pháp liên quan đến việc sử dụng thêm một plugin, đặc biệt là cho một cái gì đó đơn giản này. nó có thể được thực hiện tốt hơn. – PlantTheIdea