原生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 遍历json数组的实现代码
Sep 22 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
微信小程序 删除项目工程实现步骤
Nov 10 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
js 概率计算(简单版)
Sep 12 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 Javascript
一篇文章带你从零快速上手Rollup
Sep 07 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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
mysql+php分页类(已测)
2008/03/31 PHP
PHP注释实例技巧
2008/10/03 PHP
php下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
详解参数传递四种形式
2015/07/21 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
Python的动态重新封装的教程
2015/04/11 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
python学生管理系统代码实现
2020/04/05 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Flask-Mail用法实例分析
2018/07/21 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
《美丽的小路》教学反思
2014/02/26 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
认错检讨书
2014/10/02 职场文书
九九重阳节致辞
2015/07/31 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
HDFS免重启挂载新磁盘
2022/04/06 Servers