JavaScript代码优化:使用鼠标事件实现视频播放器底部元素的隐藏和显示
JavaScript代码优化:使用鼠标事件实现视频播放器底部元素的隐藏和显示
这段代码使用JavaScript实现了视频播放器底部元素的隐藏和显示功能,通过鼠标事件监听来触发底部元素的动画。下面是代码优化后的版本,并附上优化说明:
document.addEventListener('mouseover', function(e) {
if (e.target.classList.contains('xgplayer-controls')) {
let bottomItem = e.target.querySelector('.xg-inner-controls.xg-pos');
let copywriting = document.querySelector('[data-e2e="feed-active-video"] .tSXOCvQc');
let timeId = null;
let isShowing = false;
let isMouseOver = false;
function showBottomItem() {
bottomItem.style.transition = 'all 0.3s';
bottomItem.style.bottom = '0px';
if (configxgIcon[4].option && copywriting) {
copywriting.style.display = 'none';
}
isShowing = true;
}
function hideBottomItem() {
cancelAnimationFrame(timeId);
timeId = requestAnimationFrame(function() {
if (configxgIcon[4].option) {
bottomItem.style.bottom = -bottomItem.offsetHeight + 'px';
}
if (!configxgIcon[0].option && copywriting) {
copywriting.style.display = '';
}
isShowing = false;
});
}
function handleMouseLeave() {
isMouseOver = false;
hideBottomItem();
}
function handleMouseMove() {
if (!isShowing && isMouseOver) {
showBottomItem();
}
}
e.target.addEventListener('mouseover', function() {
cancelAnimationFrame(timeId);
isMouseOver = true;
});
e.target.addEventListener('mouseleave', handleMouseLeave);
e.target.addEventListener('mousemove', handleMouseMove);
}
});
优化说明:
-
添加了一个isMouseOver变量,用于标记是否鼠标在目标元素上。 这使得代码可以更准确地判断鼠标是否在目标元素上,从而避免不必要的调用。
-
将handleMouseMove函数的调用条件改为只有在isShowing为false且isMouseOver为true时才调用,避免不必要的调用。 这可以有效提高代码效率,避免在不需要显示底部元素时进行无谓的计算。
-
添加了handleMouseLeave函数,用于标记鼠标离开目标元素,然后再调用hideBottomItem函数隐藏底部元素。 通过这个函数,可以更准确地控制底部元素的隐藏时间,避免在鼠标仅仅短暂移出目标元素时就隐藏底部元素。
-
将鼠标离开事件监听的回调函数改为调用handleMouseLeave函数,统一处理鼠标离开的逻辑。 这可以提高代码的可读性和可维护性,避免重复代码的出现。
通过以上优化,这段代码的效率得到了提升,代码逻辑也变得更加清晰,更容易理解和维护。
原文地址: https://www.cveoy.top/t/topic/pkjm 著作权归作者所有。请勿转载和采集!