JavaScript 代码优化:提升 xgplayer-controls 的交互体验
这段代码用于处理 xgplayer-controls 元素上的鼠标事件,通过控制 bottomItem 元素的显示和隐藏,实现鼠标悬停时显示控制面板,离开时隐藏控制面板的功能。
为了改进这段代码,可以考虑以下几点:
-
减少不必要的事件监听器:目前代码中使用了两个事件监听器,可以尝试合并为一个监听器来提高性能。
-
使用事件委托:目前代码中使用了querySelector来获取元素,可以考虑使用事件委托的方式,通过事件冒泡来处理事件,减少对DOM的访问。
-
提取公共变量:目前代码中使用了多次访问相同的DOM元素,可以将这些访问提取为公共变量,避免重复访问DOM。
-
使用CSS动画:目前代码中使用了JS来实现动画效果,可以考虑使用CSS动画来代替,以提高性能和代码可读性。
下面是改进后的代码示例:
document.addEventListener('mousemove', (e) => {
const target = e.target;
if (target.classList.contains('xgplayer-controls')) {
const bottomItem = target.querySelector('.xg-inner-controls.xg-pos');
const copywriting = document.querySelector('[data-e2e="feed-active-video"] .tSXOCvQc');
clearTimeout(target.dataset.timer);
bottomItem.style.transition = 'all 0.3s';
bottomItem.style.bottom = 0 + 'px';
if (configxgIcon[4].option && copywriting) {
copywriting.style.display = 'none';
}
target.dataset.timer = setTimeout(() => {
if (configxgIcon[4].option) {
bottomItem.style.bottom = -bottomItem.offsetHeight + 'px';
}
if (!configxgIcon[0].option && copywriting) {
copywriting.style.display = '';
}
}, 1000);
}
});
改进后的代码使用了事件委托方式来监听mousemove事件,减少了事件监听器的数量。同时,使用了dataset属性来存储定时器的引用,避免了使用全局变量。另外,提取了公共变量,使用了CSS动画来代替JS实现的动画效果。
原文地址: https://www.cveoy.top/t/topic/pjYM 著作权归作者所有。请勿转载和采集!