原生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 相关文章推荐
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 Javascript
javascript getElementsByName()的用法说明
Jul 31 Javascript
再谈ie和firefox下的document.all属性
Oct 21 Javascript
图片在浏览器中底部对齐 解决方法之一
Nov 30 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
Jan 09 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
Javascript复制实例详解
Jan 28 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
一次微信小程序内地图的使用实战记录
Sep 09 Javascript
教你一步步实现一个简易promise
Nov 02 Javascript
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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
在微信小程序中使用vant的方法
2019/06/07 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python检测生僻字的实现方法
2016/10/23 Python
Python类的继承和多态代码详解
2017/12/27 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
在python shell中运行python文件的实现
2019/12/21 Python
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
病媒生物防治方案
2014/05/13 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书