对dom元素的一些操作

文章提供了一段JavaScript代码,用于实现元素的懒加载功能,根据DOMMouseScroll和onmousewheel事件判断元素是否在视口内。另外,还展示了如何在火狐和其它浏览器中设置元素的自动隐藏滚动条,并在用户滚动时平滑滚动。代码中包含事件监听的添加与销毁,以及滚动条宽度处理。
摘要由CSDN通过智能技术生成

自造轮子,不是特别好用,需要根据需求改一些代码

设置懒加载元素
export function setLazyLoad(element, callback) {
  let timer;
  // 火狐浏览器
  document.addEventListener('DOMMouseScroll', () => {
    if (!isInViewPort(element) || timer) {
      return;
    }
    timer = setTimeout(() => {
      clearTimeout(timer);
      timer = null;
    }, 3000);
    callback();
  })
  // 其余浏览器
  window.onmousewheel = function() {
    if (!isInViewPort(element) || timer) {
      return;
    }
    timer = setTimeout(() => {
      clearTimeout(timer);
      timer = null;
    }, 3000);
    callback();
  }
}

// 元素是否在可视区域
function isInViewPort(element) {
  const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight 
  const offsetTop = element.offsetTop
  const scrollTop = document.documentElement.scrollTop
  const top = offsetTop - scrollTop
  return top <= viewPortHeight + 100
}

在组件里使用示范:

setLazyLoad(document.getElementById('lazy-load'), myLazyLoadFunction);

const myLazyLoadFunction = () => {
    blablabla
}

销毁监听事件:

onUnmounted(() => {
  document.removeEventListener('DOMMouseScroll', () => {});
  window.onmousewheel = null;
})

将一个元素设置成自动隐藏滚动条的样式
// 将一个元素设置成自动隐藏滚动条的样式
export function setDynamicHiddenScrollBar({ element, timeout, paddingRight }) {
  element.style.overflowY = 'hidden';
  let timeoutId;
  // 火狐浏览器
  document.addEventListener('DOMMouseScroll', (e) => {
    element.style.overflowY = 'scroll';
    element.style.paddingRight = `${paddingRight - 8}px`;
    element.scrollTo({
      top: element.scrollTop + e.detail * 100,
      behavior: 'smooth'
    });
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => {
      element.style.overflowY = 'hidden';
      element.style.paddingRight = `${paddingRight}px`;
    }, timeout);
  })
  // 其余浏览器
  element.onmousewheel = function (e) {
    element.style.overflowY = 'scroll';
    element.style.paddingRight = `${paddingRight - 4}px`;
    element.scrollTo({
      top: element.scrollTop - (e.wheelDeltaY / 180) * 275,
    });
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => {
      element.style.overflowY = 'hidden';
      element.style.paddingRight = `${paddingRight}px`;
    }, timeout);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

该写代码了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值