我正在使用热门的mousewheel插件来模拟像this website这样的整页滚动。
jQuery(function() {
var top = 0,
viewport = jQuery(window).height(),
step = jQuery(".home .l-section:first").outerHeight(),
body = jQuery.browser.webkit ? jQuery('body') : jQuery('html'),
wheel = false;
jQuery('body').mousewheel(function(event, delta) {
wheel = true;
if (delta < 0) {
top = (top + viewport) >= jQuery(document).height() ? top : top += step;
body.stop().animate({
scrollTop: top
}, 400, function() {
wheel = false;
});
} else {
top = top <= 0 ? 0 : top -= step;
body.stop().animate({
scrollTop: top
}, 400, function() {
wheel = false;
});
}
return false;
});
jQuery(window).on('resize', function(e) {
viewport = jQuery(window).height();
step = jQuery(".home .l-section:first").outerHeight();
});
jQuery(window).on('scroll', function(e) {
if (!wheel) top = jQuery(this).scrollTop();
});
});
效果很好但不是在使用触控板时。使用触控板,无论我尝试滚动的速度有多慢,它都会滚动到页面底部。
答案 0 :(得分:4)
适用于笔记本电脑的触控板。但是,这是已知的问题,你尝试使用去抖动吗?
function mouseHandle(event) {
newDate = new Date();
var scrollAllowed = true;
if( wheel < 10 && (newDate.getTime()-oldDate.getTime()) < 100 ) {
scrollPos -= event.deltaY*(10-wheel);
wheel++;
}
else {
if( (newDate.getTime()-oldDate.getTime()) > 100 ) {
wheel = 0;
scrollPos -= event.deltaY*60;
}
else {
scrollAllowed = false;
}
}
oldDate = new Date();
if( scrollAllowed ) {
// do your stuff here
}
}
//Apply this effect with jQuery On event
$('body').on('mousewheel', function(event) { mouseHandle(event); });
此处已报告此问题:https://github.com/brandonaaron/jquery-mousewheel/issues/36
您将获得多种解决方案。希望有所帮助。帮助自己: - )
和平
的Rahul
答案 1 :(得分:1)
我用date()解决了我的问题跟踪问题,因此如果我设置的某个时间不是过去,则用户无法再滚动。
这是我的代码片段,只是使用&#39; wheel&#39;功能
var last_time = new Date();
$(window).bind('wheel', function(event) {
var now = new Date();
if((now - last_time) >= 1200)//Miliseconds
{
if (event.originalEvent.deltaY <= 0) {
//Go up
}
else {
//Go down
}
last_time = new Date();
}
});
答案 2 :(得分:1)
发现这一点的任何人,&#34;鼠标轮&#34;事件已被弃用。 https://developer.mozilla.org/en-US/docs/Web/Events/wheel
相反,使用&#34; wheel&#34;事件 你可以使用&#34; originalEvent&#34;轮子事件上的属性可以获得您期望的属性。 (deltaX,deltaY等......)
答案 3 :(得分:0)
我已使用下划线的反跳功能来解决此问题。这是我使用的代码。
$('...').mousewheel(_.debounce(function(event) {
event.preventDefault();
if(event.originalEvent.deltaY < 0){
/* do your stuff when scrolling up */
}else {
/* do your stuff when scrolling down */
}, 40,true));