iScroll滚动衔接浏览器原生滚动

来源:互联网 发布:电机控制算法书籍 编辑:程序博客网 时间:2024/04/30 06:21

在使用iScroll做滚动效果时可能会遇到一个问题。


本来页面是这样的,其中下面部分是用iScroll做的滚动,这没有什么问题。



但是如果万一被系统滚动到了下面(弹软键盘等操作都会导致页面无意间滚到下面,隐藏掉地址栏,甚至将iScroll的滚动区域隐藏掉一半)




由于iScroll的滚动会覆盖掉系统的滚动,在iScroll的滚动区域内无论怎么划都不会再能够回去了。


所以这里必须判断在iScroll滚动到尽头仍在往尽头方向滚动的时候,不要禁用系统滚动


onBeforeScrollStart : function(){},//禁用系统滚动在下面控制onBeforeScrollMove : function(e){var that = this,point = 'ontouchstart' in window && !(/hp-tablet/gi).test(navigator.appVersion) ? e.touches[0] : e,deltaY = point.pageY - that.pointY,newY = that.y + deltaY;if (newY <= that.minScrollY && newY >= that.maxScrollY) {e.preventDefault()}}


1. iScroll默认在onBeforeScrollStart方法中调用e.preventDefault()直接禁用系统滚动,而onBeforeScrollStart中并不知道滚动方向,所以需要将禁用系统滚动的逻辑转移到onBeforeScrollMove中去。

2. onBeforeScrollMove中先算出要滚到的位置,判断还在iScroll的滚动范围内,再禁用系统滚动。超出这个范围就不做任何操作,也就是使用的系统的滚动。


另外需要注意,这样的话,iScroll的弹性功能bounce就不能使用了,否则体验会怪怪的。需要将bounce参数置为false、