原生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 相关文章推荐
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
Dec 16 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
jQuery层动画定位滑动效果的方法
Apr 30 Javascript
理解Angular数据双向绑定
Jan 10 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
JS函数进阶之继承用法实例分析
Jan 15 Javascript
浅谈vue-props的default写不写有什么区别
Aug 09 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+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
Python 获取主机ip与hostname的方法
2018/12/17 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
幼儿教师个人求职信范文
2013/09/21 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
详解SQL报错盲注
2022/07/23 SQL Server