Jquery自动滚动展厅
Jquery自动滚动展厅
我试图构建一个类似于这个的网站。为了做到这一点,我编写了以下代码:
var $window = $(window); var lastScrollTop = 0; var shown_elements = 0; var next_element = 0; $window.on('scroll', scroll_to_next); $window.trigger('scroll'); var window_height = $window.height(); var window_top_position = $window.scrollTop(); var window_bottom_position = (window_top_position + window_height); var scroll = $(window).scrollTop(); function scroll_to_next() { shown_elements = Math.ceil($(window).scrollTop() / window_height); next_element = shown_elements * window_height; if (lastScrollTop < $(window).scrollTop() && lastScrollTop != 0) { //$window.scrollTop(next_element); $('html, body').animate({ scrollTop: next_element }, 'slow'); //alert(next_element); } lastScrollTop = $(window).scrollTop(); }
这是HTML代码:
Hello
description
Hello
description
Hello
description
这段代码第一次运行正常,并自动滚动到第二个“展示间”。但是当我尝试第二次滚动时,页面无法滚动。
我的代码有什么问题吗?
原因:
问题出现在代码的这一行:if (lastScrollTop < $(window).scrollTop() && lastScrollTop != 0)
。
具体来说,问题出现在lastScrollTop != 0
这一部分。
当代码第一次执行时,变量"lastScrollTop"被设置为0,所以if语句判断为false,不会滚动,但是"shown_elements"和"next_element"这两个变量被改变。
当第二次运行代码时,"lastScrollTop"已经被改变,但是由于其他变量也已经被改变,导致代码无法按预期工作。
解决方法:
解决方法可能是改变if语句中的条件,将"lastScrollTop != 0"修改。
Jquery自动滚动展厅的问题是由于没有捕捉到由$(window)提供的滚动事件而导致的。解决方法是将函数scroll_to_next()添加到$(window).scroll()中。下面是一个示例链接,可以参考其中的代码:Example