jdf2e / nutui-react

京东风格的移动端 React 组件库 、支持多端小程序(A React UI Toolkit for Mobile Web)
https://nutui.jd.com/react/
919 stars 263 forks source link

Tour 在页面有滚动条的情况下打开无滚动条的遮罩会导致错位偏移 #2623

Closed jianhuagao closed 1 month ago

jianhuagao commented 1 month ago

NutUI React 包名

@nutui/nutui-react

NutUI React 版本号

2.6.21

平台

weapp

重现链接

https://nutui.jd.com/taro/react/2x/#/zh-CN/component/tour

重现步骤

image image 去掉 nut-overflow-hidden 后正常 image

期望的结果是什么?

不出现错位

实际的结果是什么?

出现错位

环境信息

No response

其他补充信息

No response

xxhls commented 1 month ago

你好,我认为您这个问题是由于Tour组件内部使用的蒙层-Overlay组件导致的。 在Overlay组件的配置项中存在一个lockScroll的属性,它用于控制展示蒙层是是否允许底层滚动。而它的方式非常粗暴,直接在根节点添加一个nut-overlay-hidden的类并强行选中页面节点设置滚动属性为hidden。而这就是现象所在的原因,当底层滚动时,右侧存在一个滚动条,因此内容偏左。当展示蒙层时,滚动条被强制消失,因此内容恢复原位,表现形式为内容相对于蒙层偏右,而蒙版消失时页面又会恢复滚动条,内容又偏左。 解决方案1:直接给滚动节点把滚动条宽度设置为0,可以使用-webkit-scrollbar伪元素来实现 解决方案2:在滚动节点通过id+!i的方式强行提高权重,阻止样式的覆盖 解决方案3:从底层修改Overlay锁定滚动的方式,用dom操作的方式阻止/允许滚动默认事件