原生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猜数字小游戏的简单实现代码
Jul 02 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
常用的JavaScript模板引擎介绍
Feb 28 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
Aug 11 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
Node.js开发第三方微信公众平台
Jun 05 Javascript
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
150行Node.js实现的dns代理工具
Aug 02 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 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
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[00:14]护身甲盾
2019/03/06 DOTA
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
如何基于Python创建目录文件夹
2019/12/31 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
承诺书格式
2014/06/03 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
入党自传范文2015
2015/06/26 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
JS ES6异步解决方案
2021/04/29 Javascript
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript