我正在建立一个网站,我想自定义滚动。如果用户滚动,我希望他们像在此网站中一样向下滚动100%:http://onlinedepartment.nl/
编辑:我已经使用锚点管理了平滑滚动。但我希望它也可以在mousescroll上工作
有什么想法吗?提前致谢
答案 0 :(得分:2)
该网站非常好。 为了做到这一点,需要记住很多东西。 这是我在下面描述的所有内容的演示(fiddle)。
每个"页面"高度与window.innerHeight - /* the height of the menu */
每次滚动时,您都必须检查是否向上或向下滚动,您可以通过使用则更高。如果您window.pageYOffset
值更新每个滚动事件的变量并检查是否新值高于或低于此值,如果它向上滚动event.originalEvent.wheelDeltaY > 0
向上滚动。事件是滚动事件。
然后在每个向下(向上)滚动中,您想要向下或向上滚动一页的高度。您可以使用变量保存您正在使用的页面,或者您可以查看当前window.pageYOffset对应的页数。要滚动,请执行$('body').animate({scrollTop: /*page height*/ * /* the page number - 1 (to get it zero based) */})
然后,每次使用滚轮时,您都不想滚动多页。那么你可以设置例如滚动时阻塞变量为true(blocked = true
),超时后将其重置为false setTimeout(function() { blocked = false; })
,每次滚动时检查变量是否为blocked === false
,然后执行滚动,否则在绑定到滚动事件的函数中不执行任何操作event.preventDefault()
。
可能需要考虑更多的东西,但......
您可能知道这一点,但要将事件处理程序附加到scroll事件:
$(document).on('scroll', function() { /*the code that should be run on the scroll event */})
编辑:您必须绑定到鼠标滚轮事件而不是滚动事件,以防止页面在侦听事件的函数内滚动event.preventDefault()
。
EDIT2:这是一个演示http://codepen.io/Hatlen/pen/stubk。 有一点与codepen不兼容的是window.innerHeight不正确,所以div的高度与真实的window.innerHeight不同。
EDIT3:而不是保存window.pageYOffset并将新偏移量与滚动事件event.originalEvent.wheelDeltaY