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);
  }
});

优化说明:

  1. 添加了一个isMouseOver变量,用于标记是否鼠标在目标元素上。 这使得代码可以更准确地判断鼠标是否在目标元素上,从而避免不必要的调用。

  2. 将handleMouseMove函数的调用条件改为只有在isShowing为false且isMouseOver为true时才调用,避免不必要的调用。 这可以有效提高代码效率,避免在不需要显示底部元素时进行无谓的计算。

  3. 添加了handleMouseLeave函数,用于标记鼠标离开目标元素,然后再调用hideBottomItem函数隐藏底部元素。 通过这个函数,可以更准确地控制底部元素的隐藏时间,避免在鼠标仅仅短暂移出目标元素时就隐藏底部元素。

  4. 将鼠标离开事件监听的回调函数改为调用handleMouseLeave函数,统一处理鼠标离开的逻辑。 这可以提高代码的可读性和可维护性,避免重复代码的出现。

通过以上优化,这段代码的效率得到了提升,代码逻辑也变得更加清晰,更容易理解和维护。

JavaScript代码优化:使用鼠标事件实现视频播放器底部元素的隐藏和显示

原文地址: https://www.cveoy.top/t/topic/pkjm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录