h5上下滑动时页面出现抖动问题解决

h5页面加载列表使用SUI中infinite-scroll。

上下滑动时页面出现抖动,尝试了多种办法依然解决不了。

最终解决办法

<div style="overflow: auto;min-height: 100vh">  //加上
     <ul>
        <li>...</li>  //列表
        ........
     </ul>
<div> //加上复制代码


PS : 使用<div style="overflow: auto;height: 100vh"> 也是不行的,有时会触发不了 scroll列表加载不全。


### Bootstrap 模态框抖动问题的原因分析与解决方案 Bootstrap 的模态框(Modal)是一个常用的前端组件,但在某些情况下可能会出现页面滚动条引起的抖动现象。这种现象通常发生在模态框打开或关闭,由于浏览器自动调整 `body` 元素的溢出状态(overflow),从而导致页面宽度变化并触发水平滚动条的显示或隐藏。 #### 原因解析 当模态框被激活,Bootstrap 默认会在 `body` 上添加 `style="overflow: hidden;"` 属性来禁用背景内容的滚动[^1]。然而,在某些特定场景下,比如页面本身存在垂直滚动条或者 CSS 设置不当,可能导致以下情况: - 页面宽度发生变化,因为滚动条突然消失。 - 浏览器重新计算布局,造成视觉上的“抖动”。 #### 解决方案 以下是几种常见的修复方法: 1. **保留滚动条的空间** 可以为 `body` 添加一个固定的右侧边距,模拟滚动条占据的空间,即使滚动条被隐藏也不会影响页面宽度。 ```css body.modal-open { padding-right: 17px !important; /* 根据实际需求调整 */ overflow-y: scroll; } ``` 2. **强制设置 `overflow-y`** 修改默认的行为,让 `body` 在模态框开启期间始终保持可滚动的状态,而不是完全禁用滚动。 ```css .modal-open { overflow-y: auto !important; } ``` 3. **动态计算滚动条宽度** 使用 JavaScript 动态获取当前设备的滚动条宽度,并将其应用到 `body` 或其他容器上。 ```javascript function getScrollbarWidth() { const outer = document.createElement('div'); outer.style.visibility = 'hidden'; outer.style.width = '100px'; outer.style.msOverflowStyle = 'scrollbar'; // Needed for WinJS apps document.body.appendChild(outer); const widthNoScroll = outer.offsetWidth; outer.style.overflow = 'scroll'; const inner = document.createElement('div'); inner.style.width = '100%'; outer.appendChild(inner); const widthWithScroll = inner.offsetWidth; outer.parentNode.removeChild(outer); return widthNoScroll - widthWithScroll; } $(document).on('shown.bs.modal', () => { $('body').css('padding-right', `${getScrollbarWidth()}px`); }).on('hidden.bs.modal', () => { $('body').css('padding-right', ''); }); ``` 4. **自定义样式覆盖** 如果项目允许,可以直接修改 Bootstrap 的源代码或扩展其类名,避免依赖于 `.modal-open` 类的全局作用域。 ```scss @import "~bootstrap/scss/bootstrap"; $modal-scrollbar-width: 17px; body.modal-open { margin-right: $modal-scrollbar-width !important; overflow-y: overlay !important; } ``` #### 注意事项 无论采用哪种方法,都需要确保兼容性测试无误,尤其是在移动设备和不同分辨率屏幕上验证效果。此外,如果使用的是较旧版本的 Bootstrap,则需确认是否存在已知 bug 并升级至最新稳定版[^2]。 ```html <!-- 示例 HTML 结构 --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">标题</h5> <button type="button" class="close" data-dismiss="modal">×</button> </div> <div class="modal-body"> 这里是模态框的内容... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> </div> </div> </div> </div> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值