iScroll局部使用,使浏览器滑动失效

原文

iScroll 是非常常用的一个开发移动版页面的插件,但是在使用过程中我们发现如果在页面的局部区域使用了iScroll,那么在这个区域不管怎么滑动,iScroll区域可以滑动但是整个页面却是不会滑动了的,查看源码可以发现iScroll的bug所在Default options中

onBeforeScrollStart: function (e) { e.preventDefault(); },

问题就出在这里,源码在滚动前,不管三七二十一就把一切相关的浏览器默认动作都阻止了,那这里可以修改为

onBeforeScrollStart:null,

但是需求是多变的,可能有时要阻止一切,有时就需要它像PC中div部分区域出现滚动条时似的(当滚轮把div滚动到底部时候,浏览器的滚动条才开始滚动),这时添加一个Default options变量edgeRestorePrevent默认值null

edgeRestorePrevent: null,

该变量控制是否iScroll滑倒边缘时触发浏览器默认动作。

还要在 iScroll.prototype添加两个iScroll私有变量

isTop:false,  
isBottom:false, 

然后在私有的_start方法里的最开始位置定义完变量后添加

that.isTop = that.y == that.minScrollY;
that.isBottom = that.y == that.maxScrollY;

_move方法里最开始位置定义完变量后添加

if (((that.isTop && deltaY > 0) || (that.isBottom && deltaY < 0)) && that.options.edgeRestorePrevent) {
                return;
            } else {
                e.preventDefault();
            }

至此大功告成!调用时只要把edgeRestorePrevent变量设置为true即可

new iScroll("domID", {
                checkDOMChanges: true,
                edgeRestorePrevent: true
            })

如果还没有看懂就直接下载我的附件素材查看吧,附件素材里的iScroll的注释中标注@dyh的部分就是修改过源码的地方。

PS:如果直接用的话记得把Zepto改成jQuery

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值