Skrollr引发干预错误致body/html overflow:hidden,网站无法滚动求解决
解决skrollr插件的滚动异常与控制台错误问题
1. 修复body/html被设为overflow: hidden导致无法滚动的问题
skrollr默认会强制修改页面的高度和overflow属性来控制滚动动画,这就是你遇到页面锁死无法滚动的核心原因。解决起来很简单,在初始化skrollr的时候添加forceHeight: false配置项,就能阻止它篡改body和html的样式:
// 初始化skrollr时加入forceHeight配置 var skrollrInstance = skrollr.init({ forceHeight: false });
这个配置会让skrollr放弃强制固定页面高度,保留原生的滚动行为,同时依然能正常运行滚动动画效果。
2. 解决"Unable to preventDefault inside passive event listener"控制台错误
这个错误是因为Chrome等现代浏览器对触摸事件的被动监听器机制做了限制,旧版本的skrollr没有适配这个新特性。你可以按以下方式解决:
- 优先方案:升级skrollr到最新版本:官方后续更新已经修复了这个被动事件监听器的问题,更新插件后错误会自动消失。
- 临时方案(无法升级时):如果暂时没法升级插件,你可以在初始化时禁用触摸事件支持(如果你的项目不需要在触摸设备上使用skrollr的话):
var skrollrInstance = skrollr.init({ touchScroll: false, forceHeight: false // 记得同时保留上面的滚动修复配置 });
要是你需要触摸设备上的支持,也可以手动修改skrollr.min.js的代码——找到添加touchmove事件监听器的位置,把事件选项改成{ passive: false },不过这种方式需要你能定位到对应的代码片段,而且后续升级插件时需要重新修改,不如直接升级插件来得省心。
最后提醒下,修改完配置后记得清空浏览器缓存再测试,确保新的初始化代码生效。
内容的提问来源于stack exchange,提问作者SenTisso
相关产品推荐
相关产品推荐

