原生javascript实现图片滚动、延时加载功能


Posted in Javascript onJanuary 12, 2015

实现效果:下拉滚动条时,图片出现在可见区域时,才开始加载

思路:

(1)img标签,把真实的图片地址,放在自己设置的属性里面,如 lazy-src

(2)获取img离页面的高度(在JQ里是offset().top),原生是:

img.getBoundingClientRect().top + document.body.scrollTop||document.documentElement.scrollTop

(3)判断img出现的位置是否在可见区域里:

.在浏览器的可见区域,justTop>scrollTop&&offsetTop<(scrollTop+windowHeight),这里的justTop是图片的offsetTop+图片高度

//保存document在变量里,减少对document的查询

            var doc = document;

            for(var n=0,i = this.oImg.length;n<i;n++){

                //获取图片占位符图片地址

                var hSrc = this.oImg[n].getAttribute(this.sHolder_src);

                if(hSrc){

                    var scrollTop = doc.body.scrollTop||doc.documentElement.scrollTop,

                        windowHeight = doc.documentElement.clientHeight,

                        offsetTop = this.oImg[n].getBoundingClientRect().top + scrollTop,

                        imgHeight = this.oImg[n].clientHeight,

                        justTop = offsetTop + imgHeight;

                    // 判断图片是否在可见区域

                    if(justTop>scrollTop&&offsetTop<(scrollTop+windowHeight)){
                        this.isLoad(hSrc,n);

                    }

                }
            }

以下为详细代码:

function LGY_imgScrollLoad(option){

        this.oImg = document.getElementById(option.wrapID).getElementsByTagName('img');

        this.sHolder_src = option.holder_src;

        this.int();

    }

    LGY_imgScrollLoad.prototype = {

        loadImg:function(){

            //保存document在变量里,减少对document的查询

            var doc = document;

            for(var n=0,i = this.oImg.length;n<i;n++){

                //获取图片占位符图片地址

                var hSrc = this.oImg[n].getAttribute(this.sHolder_src);

                if(hSrc){

                    var scrollTop = doc.body.scrollTop||doc.documentElement.scrollTop,

                        windowHeight = doc.documentElement.clientHeight,

                        offsetTop = this.oImg[n].getBoundingClientRect().top + scrollTop,

                        imgHeight = this.oImg[n].clientHeight,

                        justTop = offsetTop + imgHeight;

                    // 判断图片是否在可见区域

                    if(justTop>scrollTop&&offsetTop<(scrollTop+windowHeight)){

                        //alert(offsetTop);

                        this.isLoad(hSrc,n);

                    }

                }
            }

        },

        isLoad:function(src,n){

            var src = src,

                n = n,

                o_img = new Image(),

                _that = this;

            o_img.onload = (function(n){

                _that.oImg[n].setAttribute('src',src);

                _that.oImg[n].removeAttribute(_that.sHolder_src);

            })(n);

            o_img.src = src;
        },

        int:function(){

            this.loadImg();

            var _that = this,

                timer = null;

            // 滚动:添加定时器,防止频繁调用loadImg函数

            window.onscroll = function(){

                clearTimeout(timer);

                timer = setTimeout(function(){

                    _that.loadImg();

                },100);

            }

        }

    }

效果图:

原生javascript实现图片滚动、延时加载功能

以上就是本文的全部内容了,实现的效果不比jQuery插件实现的差吧,代码还简洁,小伙伴们参考下吧。

Javascript 相关文章推荐
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
jquery cookie的用法总结
Nov 18 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 Javascript
JS打印彩色菱形的实例代码
Aug 15 Javascript
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 #Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 #Javascript
推荐4个原生javascript常用的函数
Jan 12 #Javascript
原生js实现日期联动
Jan 12 #Javascript
Javascript中innerHTML用法实例分析
Jan 12 #Javascript
js实现从数组里随机获取元素
Jan 12 #Javascript
javascript的tab切换原理与效果实现方法
Jan 10 #Javascript
You might like
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
init进程的作用
2012/04/12 面试题
毕业生求职简历中的自我评价
2013/10/18 职场文书
外贸业务员岗位职责
2013/11/24 职场文书
计算机网络专业推荐信
2013/11/24 职场文书
求职简历中自我评价
2014/01/28 职场文书
大课间活动实施方案
2014/03/06 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
毕业典礼邀请函
2015/01/31 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Python sklearn分类决策树方法详解
2022/09/23 Python