原生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 相关文章推荐
json跟xml的对比分析
Jun 10 Javascript
网页中的图片的处理方法与代码
Nov 26 Javascript
基于Jquery实现的一个图片滚动切换
Jun 21 Javascript
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
js实现拖拽效果
Feb 12 Javascript
javascript自定义右键弹出菜单实现方法
May 25 Javascript
React.js入门学习第一篇
Mar 30 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
Javascript 解构赋值详情
Nov 17 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
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
初步解析Python中的yield函数的用法
2015/04/03 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python 中的with关键字使用详解
2016/09/11 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
python中的时区问题
2021/01/14 Python
python 装饰器重要在哪
2021/02/14 Python
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
大学生就业自我鉴定
2013/10/26 职场文书
初中物理教学反思
2014/01/14 职场文书
法学函授自我鉴定
2014/02/06 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
广告创意求职信
2014/03/17 职场文书
爱护花草树木的标语
2014/06/11 职场文书
大学迎新生标语
2014/10/06 职场文书
民事赔偿协议书
2014/11/02 职场文书
大学生实习证明
2015/06/16 职场文书
同意报考公务员证明
2015/06/17 职场文书