iscroll嵌套着iscroll

起初是最外框用iscroll滚动,文本框里的滚动条没有操作反应,于是给文本框也添加iscroll实例化。这时候发现
iscroll嵌套着iscroll,当滑动文本框时,最外框也跟着同步滚动,请问怎么写才能不触发最外框iscroll操作。
或者怎么弄让外框和文本框各滚各的?
图片描述

阅读 9k
4 个回答

楼主是不是把默认的滚动事件给禁止了。
如果你禁止了默认的滚动事件这个时候文本内容溢出的时候,你滚动确实没有效果。
个人认为只要文本框不是作为外面第一个滚动的div的一级子元素实现各执滚动式ok的。但是你要有两个实例化的对象,他们两者不能共用一个,且文本框的有一个父元素,和第一个滚动的div一样。

在内部iscroll滚动时候设置阻止事件冒泡,外层捕获不到就可以了

我也遇到了这样的问题,不过在 iscrollissue 上已有解答方案,亲测有效,基本思路:

const innerScroll = new IScroll($inner, {
    ouseWheel: true,
    tap: false,
    scrollbars: true,
    interactiveScrollbars: true,
    preventDefault: true,
    mouseWheel: true
});

// 滚动时禁用外层滚动,内层滚到顶或滚到底重新启用外层滚动,滚动结束也重新启用外层滚动
innerScroll .on('scrollStart', function () {
    if ((this.directionY === 1 && this.y === this.maxScrollY) || (this.directionY === -1 && this.y === 0)) {
        outScroll && outScroll.enable();
    } else {
        outScroll && outScroll.disable();
    }
});

innerScroll .on('scrollEnd', function () {
    outScroll&& outScroll.enable();
});

参考 githubissue

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题