原生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中的枚举功能
Mar 06 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
May 18 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
newxtree.js代码
2007/03/13 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
JS验证码实现代码
2017/09/14 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
学前班评语大全
2014/05/04 职场文书
社保转移委托书范本
2014/10/08 职场文书
公司人力资源管理制度
2015/08/05 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android
Redis实现分布式锁的五种方法详解
2022/06/14 Redis