原生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 AJAX 调用WebService实现代码
Mar 24 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
javascript常见用法总结
May 22 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
vue导航栏部分的动态渲染实例
Nov 01 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
vue或react项目生产环境去掉console.log的操作
Sep 02 Javascript
Vue 实例中使用$refs的注意事项
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实现RSA加密类实例
2015/03/26 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
数控技校生自我鉴定
2014/04/19 职场文书
优秀毕业生求职信
2014/06/05 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
使用python绘制分组对比柱状图
2022/04/21 Python