我正在为一个已经存在的桌面站点开发移动端响应式版本,该站点上已有许多繁重的hover
效果。当我在触摸屏幕上滚动时,经常会发生一些性能消耗大的hover
操作,例如淡入一个大的box-shadow
和/或动画border
。显然,我不需要在移动浏览器上使用这些东西,我听说仅在移动设备上禁用滚动悬停可以实现巨大的性能提升。
是否有一种简单的方法,只在移动设备上滚动期间临时禁用所有hover效果?从用户体验角度来看,这样做是否安全?从性能角度来看,是否值得实施?
我正在为一个已经存在的桌面站点开发移动端响应式版本,该站点上已有许多繁重的hover
效果。当我在触摸屏幕上滚动时,经常会发生一些性能消耗大的hover
操作,例如淡入一个大的box-shadow
和/或动画border
。显然,我不需要在移动浏览器上使用这些东西,我听说仅在移动设备上禁用滚动悬停可以实现巨大的性能提升。
是否有一种简单的方法,只在移动设备上滚动期间临时禁用所有hover效果?从用户体验角度来看,这样做是否安全?从性能角度来看,是否值得实施?
<body class="alloweffects">
<a>Some text</a>
</body>
.alloweffects a:hover {
color:red;
}
然后,要仅在滚动期间防止效果,您可以简单地侦听scroll事件并相应地设置类。
关于性能:
我认为性能收益将是微不足道的,但它可能会因不同的浏览器和设备而有所不同。
但基本上应该意味着更少的事件侦听器,这意味着更多的内存来处理其他事情,其中包括滚动。
如果我们谈论大量元素,则我认为性能收益将更显着-特别是在弱设备上。
这需要一些测试,但问题是:
您想为移动设备使用什么断点(通常为480px)
如何选择所有当前可悬停的项目
您需要覆盖哪些效果
无论如何,一个好的起点可以是:
@media screen and (max-width: 480px) {
:hover > * {
// override current effects to none
}
你想要使用 pointer-events: none;
CSS:
.disable-hover {
pointer-events: none;
}
Javascript:
var body = document.body,
timer;
window.addEventListener('scroll', function() {
clearTimeout(timer);
if(!body.classList.contains('disable-hover')) {
body.classList.add('disable-hover')
}
timer = setTimeout(function(){
body.classList.remove('disable-hover')
},500);
}, false);
pointer-events: none;
是非常糟糕的想法。它不仅会禁用悬停状态,还会做更多的事情。 - Brandon Durham