javascript - 滚动“水平滚动的 div 元素”也会使父滚动
问题描述
我已经实现了一个 TabbarController,用户可以在其中滑动不同的选项卡。我通过添加“touchstart”、“touchmove”和“touchend”事件来实现这一点。所有选项卡都有一个水平滚动的元素,当滚动时会在父级上调用“touchmove”,从而导致父级和子级同时滚动。是否可以将滚动限制为子项/限制触摸事件从子项传递给父项?
我尝试在父 div 上使用 'overflow:hidden' 并尝试在触摸事件上使用 'prevendefault()'。
解决方案
我终于写了一个解决方案来解决我的问题。当事件回调传播回添加侦听器的父元素时,我遍历 DOM 对象以检查子元素的可滚动区域。如果当前触摸的子项具有可滚动内容,则不会为父项处理触摸事件。
var element:HTMLElement = event.target;
var cancel:boolean = false;
while (element && element.parentElement){
if (element.scrollWidth > element.clientWidth){
cancel = true;
break;
}
element = element.parentElement;
}
推荐阅读
- javascript - 脚本似乎在页面加载之前运行
- ios - QT creator 不能在 iPhone Simulator Mac os X 上构建 - 错误 65
- r - 数据框行到带有列名的字符串
- sql - MSAccess 查询以搜索数据表中的条件列表
- mysql - 奇数无法添加外键约束
- amazon-cloudformation - 使用 Cognito 池更新 CloudFormation 堆栈声称我们在不添加属性时添加了属性
- r - #NOT DUPLICATED!!# 如何从 R 中 ggplot 中的 geom_density 输出中获取内核密度值?
- keras - 训练准确度很好,但测试准确度很差
- javascript - bxSlider 照片之间的过渡
- c# - 如何分别检查每个对象的验证?