图片延迟加载或者 dom延迟加载

<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="UTF-8">
  <title>Lazyload 1</title>
  <style>
    img {
      display: block;
      margin-bottom: 50px;
      height: 200px;
    }

    .a {
      height: 400px;
      visibility: hidden;
    }

    .b {
      visibility: visible !important;
      animation-name: myfirst;
      animation-duration: 0.4s;
      animation-delay: 0.4s;
      animation-iteration-count: 1;
      animation-fill-mode: forwards;
    }

    @keyframes myfirst {
      0% {
        /*visibility: hidden;*/
        background: rgba(255, 0, 0, 0);
      }

      25% {
        background: rgba(50, 0, 0, .2);
      }

      50% {
        background: rgba(100, 0, 0, .4);
      }

      100% {
        background: rgba(150, 0, 0, .8);
      }

    }
  </style>
</head>

<body>
  <div class='a'>
    1
  </div>
  <div class='a'>
    2
  </div>
  <div class='a'>
    3
  </div>
  <div class='a'>
    4
  </div>
  <div class='a'>
    5
  </div>

  <div class='a'>
    6
  </div>

  <div class='a'>
    24
  </div>
  <div class='a'>
    24
  </div>
  <div class='a'>
    24
  </div>


  <!-- <script>
    function throttle(fn, delay, atleast) {
      var timeout = null,
        startTime = new Date();
      return function () {
        var curTime = new Date();
        clearTimeout(timeout);
        if (curTime - startTime >= atleast) {
          fn();
          startTime = curTime;
        } else {
          timeout = setTimeout(fn, delay);
        }
      }
    }

    function lazyload(op = {
      a: "a"
    }) {
      var images = document.getElementsByClassName(op.a);
      var len = images.length;
      return function () {
        var seeHeight = document.documentElement.clientHeight || document.body.clientHeight;
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        let a = seeHeight + scrollTop
        for (var i = 0; i < len; i++) {
          if (images[i].offsetTop < a) {
            document.getElementsByClassName('a')[i].classList.add('b')
          }

          // if (scrollTop > images[i].offsetTop + images[i].clientHeight || a < images[i].offsetTop) {
          //   document.getElementsByClassName('a')[i].classList.remove('b')
          // }
        }
      }
    }
    var loadImages = lazyload();
    loadImages(); //初始化首页的页面图片
    document.getElementsByClassName('a')[0].classList.add('b')
    window.addEventListener('scroll', throttle(loadImages, 0, 0), true);
  </script> -->


  <script>
    const a = {
      init(opt = {
        up: false,
        activeClass: null,
        className: null
      }) {
        const loadImages = this.lazyload({
          up: opt.up,
          activeClass: opt.activeClass,
          className: opt.className,
        });
        loadImages(); //初始化首页
        window.addEventListener('scroll', this.throttle(loadImages, 0, 0), true);
      },
      throttle: (fn, delay, atleast) => {
        let timeout = null,
          startTime = new Date();
        return function () {
          let curTime = new Date();
          clearTimeout(timeout);
          if (curTime - startTime >= atleast) {
            fn();
            startTime = curTime;
          } else {
            timeout = setTimeout(fn, delay);
          }
        }
      },

      lazyload: (option) => {

        let images = document.getElementsByClassName(option.className);
        let len = images.length;
        return function () {
          if (!option.activeClass && !option.className) {
            return
          }
          let seeHeight = document.documentElement.clientHeight || document.body.clientHeight;
          let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
          let a = seeHeight + scrollTop
          for (let i = 0; i < len; i++) {
            if (images[i].offsetTop < a) {
              document.getElementsByClassName(option.className)[i].classList.add(option.activeClass)
            }

            if (option.up && scrollTop > images[i].offsetTop + images[i].clientHeight || a < images[i]
              .offsetTop) {
              document.getElementsByClassName(option.className)[i].classList.remove(option.activeClass)
            }
          }
        }
      }
    }
    a.init({
      activeClass: "b",
      className: "a",
    })
  </script>


  <!-- <script>
    function throttle(fn, delay, atleast) {

      var timeout = null,
        startTime = new Date();
      return function () {
        var curTime = new Date();
        clearTimeout(timeout);
        if (curTime - startTime >= atleast) {
          fn();
          startTime = curTime;
        } else {
          timeout = setTimeout(fn, delay);
        }
      }
    }

    function lazyload() {
      var images = document.getElementsByTagName('img');
      var len = images.length;
      var n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历	
      return function () {
        var seeHeight = document.documentElement.clientHeight || document.body.clientHeight;
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        for (var i = n; i < len; i++) {
          if (images[i].offsetTop < seeHeight + scrollTop) {
            if (images[i].getAttribute('src') === './images/loading.jpg') {
              images[i].src = images[i].getAttribute('data-src');
              images[i].style.display = "block";
            }
            n = n + 1;
          }
        }
      }
    }
    var loadImages = lazyload();
    loadImages(); //初始化首页的页面图片
    window.addEventListener('scroll', throttle(loadImages, 500, 1000), false);
  </script> -->


</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值