图片的懒加载

每日一题

HTML 篇

0113-- 网站开发中,如何实现图片的懒加载

1、在vue中实现懒加载(未测试完)

npm 安装 插件

npm install vue-lazyload -s

模块化引入

import lazyload from "vue-lazyload"

在VUE中引入一张图片,单引号里面的就是到时候懒加载时候显示的图片,具体路径大家自己找对自己的路径

Vue.use(
lazyload,{
    loading:'../static/images/ttp.gif'}
)

下一步我们找到需要实现懒加载的图片位置代码,如:

<img :src="listB[0].Pic"/>

我们将 :src 改为 v-lazy即可,改完如下:

<img v-lazy="listB[0].Pic"/>

这样我们的懒加载就实现了

2、echo.js (测试完毕)

有现成的懒加载图片的js echo.js

https://laod.cn/page/javascript-echo-js.html

http://amazeui.github.io/echo/

<script src="js/echo.min.js"></script>
<script>    
    Echo.init({
        offset: 0,//离可视区域多少像素的图片可以被加载 0
      throttle: 5000, //图片延时多少毫秒加载 250
        debounce:true,//防抖动 true
        unload:false,//告诉echo是加载还是卸载视图中的图片,当图片离开视图区域时触发  false
        callback:function(element, op){
            if(op==='load'){
                element.classList.add('loaded');
            } else {
            element.classList.remove('loaded');
            }
            // console.log(element, op)
            // console.log("load ok")
        }//回调函数,用来检测图片是否加载	function()
    }); 
<script>
    <div class="demo">
        <img class="lazy" src="images/loading.gif" data-echo="images/1.gif">
    </div>
    <style>
        .demo img {
            width: 80%; 
            height: 100%; 
            background: url(images/loading.gif) 50% no-repeat;
        } 
    </style>
3、函数节流(throttle)与函数去抖(debounce)、scroll (测试完毕)
    <style>
        img {
            display: block;
            margin-bottom: 10px;
            width: 700px;
        }
    </style>
    <img src="images/loading.gif" data-src="images/1.gif">
    <img src="images/loading.gif" data-src="images/2.gif">
    <img src="images/loading.gif" data-src="images/3.gif">
    //函数绑定在 scroll 事件上,当页面滚动时,避免函数被高频触发,
    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;
            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.gif') {
                     images[i].src = images[i].getAttribute('data-src');
                    }
                    n = n + 1;
                 }
            }
        }
    }
    

    var loadImages = lazyload();
    //初始化首页的页面图片
    loadImages();
    window.addEventListener('scroll', throttle(loadImages, 500, 1000), false);
    //函数节流(throttle)与函数去抖(debounce)处理,
    //500ms 的延迟,和 1000ms 的间隔,当超过 1000ms 未触发该函数,则立即执行该函数,不然则延迟 500ms 执行该函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值