滚动渗透问题描述:
当在移动终端上开发模态框时(Mini程序也将出现),当模态框下的页面超过一个屏幕时,在定位的弹出式掩码层上滑动,下面的内容也将一起滑动,就好像事件渗透到下面的DOM元素一样。我们比较单击以渗透,并将其称为滚动穿透。
问题的原因:
通过事件的外观,可以推断出文档的滚动事件是触发的,因此我们可以禁用滚动事件。
案例伪代码:解决方案e。()
mini程序 - 脚本语法,通过e。()阻止元素的 - 移动事件。 (同样,H5,聆听 - 移动事件并防止其 - 移动事件)
<view class="modal-wrapper" @touch-move="test.disableScrollEvent"> <view class="mask">view> <view class="modal-content">view> view> // 外部导入sjs文件 <script lang="sjs" module="test" src="./test.sjs">script>
// test.sjs export default { disableScrollEvent: (event) => { event.preventDefault() } }
解决方案B( - )
默认情况下,PAN(滚动)和变焦手势是由浏览器专门处理的,但是可以通过CSS功能更改触摸手势的行为。选择几个值如下。
价值描述
汽车
使浏览器可以处理所有锅和变焦手势。
没有任何
禁用浏览器以处理所有PAN和变焦手势。
启用锅和缩放手势,但请禁用其他非标准手势,例如双击变焦。
-飞涨
启用多指平移和缩放页面。
因此,将此属性设置在元素上,并禁用元素上的所有手势(及其不可滚动的后代)可以解决问题。
.modal-wrapper{ touch-action: none; }
滚动溢出问题描述:
弹出窗口还包含滚动元素。当滚动元素滚动到底部或顶部时,向下或向上滚动也会触发页面滚动。这种现象称为滚动链(),但感觉就像滚动溢出的名称更有意义。
解决方案 - 迷你程序( - / - )
Mini程序提供的-View组件可以使用 - 和 - 属性,如下:
<scroll-view class="content" scroll-y disable-lower-scroll="out-of-bounds" disable-upper-scroll="out-of-bounds" onTouchMove="{{supportSjs ? sjs.enableScrollEvent : ''}}" > <view a:for="{{100}}" a:for-item="item"> {{item}} view> scroll-view>
其背后的原理是,当组件滚动到底部或顶部时,所有滚动都会通过调用阻塞,以使页面滚动不会触发,并且在滚动之间没有进行处理。
解决方案-H5(未经验证) - ( - )
- 是CSS的功能,允许浏览器滚动到边界。它具有以下值。
价值描述
汽车
默认效果是元素的滚动可以传播到祖先元素。
阻止滚动链,滚动不会传播到祖先元素,而是会显示节点本身的局部效果。例如,在滚动或iOS上。
没有任何
与,但会防止其自身的过度影响。
您可以尝试:
.content { overscroll-behavior: none; }
简单,干净和高性能,但整个系列不支持它。兼容性如下。您是否觉得这是IE的现代版本(偶然地从路人那里听到)!
![。png](#= - eaa3-4&crop = 0&crop = 0&crop = 1&crop = 1&crop = 1&crop = 1&trof =&=&= 683&id =&=&=&= []