Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery scrollstart、scrollstop和快速滚动问题_Scroll_Jquery_Custom Events - Fatal编程技术网

jQuery scrollstart、scrollstop和快速滚动问题

jQuery scrollstart、scrollstop和快速滚动问题,scroll,jquery,custom-events,Scroll,Jquery,Custom Events,我遇到了一个问题:scrollstart和scrolltop 当我使用鼠标滚轮滚动一个“凹口”或单击滚动条的某个位置远低于或高于其当前位置时,导致突然大量滚动,我得到相同的scrollTop()scrollstart和scrolltop的值-我不知道滚动从何处开始,也不知道滚动的方向。JSFIDLE可用(注意:如果分辨率极高,则必须向HTML添加更多文本,以便在结果窗口中显示滚动条) HTML: JavaScript: var before = 0; $(window).bind('scrol

我遇到了一个问题:
scrollstart
scrolltop

当我使用鼠标滚轮滚动一个“凹口”或单击滚动条的某个位置远低于或高于其当前位置时,导致突然大量滚动,我得到相同的
scrollTop()
scrollstart
scrolltop
的值-我不知道滚动从何处开始,也不知道滚动的方向。JSFIDLE可用(注意:如果分辨率极高,则必须向HTML添加更多文本,以便在结果窗口中显示滚动条)

HTML:

JavaScript:

var before = 0;

$(window).bind('scrollstart', function() {
    before = $(window).scrollTop();
});

$(window).bind('scrollstop', function() {
    alert('before: ' + before + "\nafter: " + $(window).scrollTop())
});


关于如何为
scrollstart
事件检索真正的
scrollTop()
值,有什么想法吗?我想修改插件是一个选项,所以欢迎所有想法。

我建议在另一个事件中,例如mousemove()中,不要在滚动开始时记录
之前的


也许我误解了你的问题(我没有使用该插件),但我认为你不需要使用该插件的每个部分。如果您只想知道ScrollTop的上一个和当前值及其方向,请查看以下内容:


为了添加计时功能,您只能使用插件的这一部分(或者简单地说,在滚动时启动setTimeout以记录更大的更改)。

这主意不错,但如果您使用鼠标拖动滚动条,则会失败,但仍然只返回最后几个像素的移动(0-5,取决于速度)在FF 10.0.2中,当用鼠标拖动滚动条时,必须与浏览器有关,然后,我在Chrome上进行测试,工作正常。我这里没有Firefox,所以我不知道,Sorryinded,在不同的浏览器上看起来是不同的+1的努力,但希望有一个跨浏览器的解决方案。谢谢。我通过console.log消息更改了警报(我觉得它们不那么烦人),所以请确保启动您的控制台以查看更改。不幸的是,我确实需要该插件触发
scrollstart
scrollstop
事件的功能。您仍然可以使用它。请注意,实际的插件使用了一个计时器:“……模拟这样一个事件的唯一方法是在最后一次滚动动作和事件本身之间有一个延迟–计时器可以在每个“滚动”事件上启动,然后如果没有及时清除该计时器(比如500毫秒),则可以假定用户已经完成了“停止滚动”,或者,从一个冗长的滚动中中断;在我看来,这两种情况都是“停止滚动”事件的保证。”。我想你描述的是插件的实际工作方式。让我澄清一下:我需要知道滚动何时开始、何时结束以及用户滚动了多远。据我所知,你的解决方案会报告每个滚动事件(而不是我所关注的),滚动距离最小(连续滚动事件中位置的差异;不是我想要的)。如果我遗漏了什么,一定要告诉我,因为我仍然没有最终解决方案,赏金仍然可以授予:)您好您的评估是正确的,但我告诉您的是,您可以实现滚动开始时的检测,特别是当您已经拥有每个滚动事件的开始、结束和间隔时。您可以通过使用计时器来实现这一点,以避免使用idea(和代码,如果您愿意)记录每个滚动事件在插件的页面中解释。
#scrollable {width: 120px;}
var before = 0;

$(window).bind('scrollstart', function() {
    before = $(window).scrollTop();
});

$(window).bind('scrollstop', function() {
    alert('before: ' + before + "\nafter: " + $(window).scrollTop())
});
var currentScrollTop, temporalScroll = 0;
$(window).scroll(function(){
    currentScrollTop = $(this).scrollTop();
    console.log('Previous value: ' + temporalScroll)
    if (currentScrollTop > temporalScroll) {
        console.log('scroll down')
        console.log('Current value: ' + currentScrollTop)
    }
    else { 
        console.log('scroll up');
        console.log('Current value: ' + currentScrollTop)
    }
    temporalScroll = currentScrollTop;

});