jQuery插件图片懒加载lazyload
来自XXX的前言:
什么是ImageLazyLoad技术
在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的
交互。尤其是对于高清晰的图片,占的几M的空间。ImageLazyLoad技术就是,当前可见界面的图片是加载进来的,而不可见页面(通过滚动条下拉可
见)中的图片是不加载的,这样势必会引起速度上质的提升。
实现原理:
当图片滚动到可视区时将图片加载进来。
图片不在可视区判断:
(一):图片距离页面顶端的高度 大于 窗口可视区的高度+window滚动条的scrollTop。
(二):图片距离页面顶端的高度+图片自身的高度 小于 window滚动条的scrollTop。
在lazyload中的实现(lazyload源码在后面):
var _this=$(this), //this就是图片
top=win.scrollTop(), //win就是window
imgTop=_this.offset().top,
imgHeight=_this.outerHeight(true); if(top+win.height()>imgTop && imgTop+imgHeight>top){
...(图片在可视区了)
}
使用插件html准备(这是一个最简单的图片懒加载,或许这个已经达到正常需求):
html结构: <div id="box">
<img data-src="http://www.netbian.com/d/file/20150325/41ada82f8c880dc89bdb95e38e8777f4.jpg" src="loading.svg" />
......
<img data-src="http://www.netbian.com/d/file/20140410/875d3e24e25a00761a71c4d46f130da0.jpg" src="loading.svg" />
</div> 解释:先用一张所有的图片(src)加载loading这个图片,然后给img加个data-src的属性,存储着图片本来的路径,然后就等js实现了。
js使用插件:
<script>
$('img').lazyload(/*{
effect:'fadeIn', //默认'fadeIn(淡入)',参数列表['none','fadeIn']
fadeTime: 600, //淡出时间,默认600ms,参数为number类型时间
timeout: 260 //当用户看到图片时,是否立即加载图片,默认'(延迟)260ms',参数列表['none','time(number类型)']
}*/)
</script>
插件源码(兼容ie6):
;(function($){
$.fn.extend({
lazyload:function(Options){
var _this=$(this),
win=$(window),
timer=null,
settings=$.extend({
effect: 'fadeIn',
fadeTime: 600,
timeout: 260
},Options);
loading(); //开始执行已经到可视区的图片
win.scroll(function(){
settings.timeout=='none' ? loading() : ( clearTimeout(timer),timer=setTimeout(loading,settings.timeout) ) //是否延时加载
});
function loading(){
_this.each(function(){
var _this=$(this),
top=win.scrollTop(),
imgTop=_this.offset().top,
imgHeight=_this.outerHeight(true);
if(top+win.height()>imgTop && imgTop+imgHeight>top){
var dSrc=_this.attr('data-src');
if(dSrc==_this.attr('src')) return; //图片已经显示,则返回
$(new Image()).prop('src',dSrc).load(function(){ //替换图片URL
_this.attr('src',dSrc);
settings.effect=='fadeIn' && _this.css('opacity',0).animate({opacity:1},settings.fadeTime)
})
}
})
}
return _this
}
})
})(jQuery);
--------- 平平的分割线 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
有了来自 @李明夕 的指导,然后就对lazyload进行了改造,添加了函数节流,其实之前的也用到了,只不过不知道专业名称-_-#,不过还是学到不少,函数节流文章链接:http://www.alloyteam.com/2012/11/javascript-throttle/
然后就是添加了事件移除功能,应该是有利于性能优化的。下面是改过后的代码:
;(function($){
$.fn.extend({
lazyload:function(Options){
var gThis=$(this),
win=$(window),
throttle=function(fn,delay){ //函数节流,【执行函数,延迟时间】
var timer,
startTime=new Date();
return function(){
clearTimeout(timer);
if(!delay && new Date()-startTime>100){ //没有延迟,并判断延迟滚动时间的必须的时间
startTime=new Date();
fn()
}else if(delay){
timer=setTimeout(function(){
startTime=new Date();
fn()
}, delay)
}
}
},
settings=$.extend({
effect: 'fadeIn',
fadeTime: 600,
delay: 400
},Options);
loading(); //开始便加载已经出现在可视区的图片
win.on( 'scroll.lazyload', throttle(loading, settings.delay) );
function loading(){
if(!gThis.length) return win.off('scroll.lazyload'); //当所有的图片都加载完,移除窗口滚动事件
gThis.each(function(){
var _this=$(this),
top=win.scrollTop(),
imgTop=_this.offset().top,
imgHeight=_this.outerHeight(true);
if(top+win.height()>imgTop && imgTop+imgHeight>top){
gThis=gThis.not( _this ); //删除jQuery选择好的元素集合中已经被加载的图片元素
var dSrc=_this.attr('data-src');
$(new Image()).prop('src',dSrc).load(function(){ //替换图片URL
_this.attr('src',dSrc);
settings.effect=='fadeIn' && _this.css('opacity',0).animate({opacity:1},settings.fadeTime)
})
}
})
}
return $(this)
}
})
})(jQuery);
Demo地址:http://small.890m.com/lazyload/
jQuery插件图片懒加载lazyload的更多相关文章
- js插件---图片懒加载lazyload
js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...
- js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用 一.总结 一句话总结:图片懒加载echo.js结合 Amaze UI ScrollSpy 使用的效果就是:懒加载 ...
- [js开源组件开发]图片懒加载lazyload
图片懒加载lazyload 前端对请求的一种优化方式,为什么叫懒加载,无从查起,反正我当初一直认为它是滚动加载的一种类型.它主要是以图片或背景在可视区域内时才显示真正的图片,减少src带来的负荷.所以 ...
- 使用jQuery实现图片懒加载原理
原文:https://www.liaoxuefeng.com/article/00151045553343934ba3bb4ed684623b1bf00488231d88d000 在网页中,常常需要用 ...
- jQuery的图片懒加载
jQuery的图片懒加载 function imgLazyLoad(options) { var settings = { Id: $('img'), threshold: 100, effectsp ...
- 插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js
插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...
- 前端实现图片懒加载(lazyload)的两种方式
在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...
- 前端性能优化--图片懒加载(lazyload image)
话说前头: 上次写了一篇webpack的学习心得,webpack能做到提升前端的性能,其模块打包最终生成一个或少量的文件能够减少对服务端的请求.除此之外,本次的图片懒加载(当然不仅限于图片,还可以有视 ...
- 前端性能优化成神之路--图片懒加载(lazyload image)
图片懒加载(当然不仅限于图片,还可以有视频,flash)也是一种优化前端性能的方式.使用懒加载可以想要看图片时才加载图片,而不是一次性加载所有的图片,从而在一定程度从减少服务端的请求 什么是懒加载 懒 ...
随机推荐
- maven的mirror和repository加载顺序
一.概述 maven的settings.xml文件里面有proxy.server.repository.mirror的配置,在配置仓库地址的时候容易混淆 proxy是服务器不能直接访问外网时需要设置的 ...
- Kubernetes学习之k8s
k8s是什么 云原生 越来越多的开发者不仅使用容器作为应用部署和运行的载体,还积极使用了与容器这个应用载体天生匹配的微服务的架构,并依靠容器调度编排引擎的帮助,以保持对外部的敏捷性,这种容器化的微服务 ...
- JS中3种风格的For循环有什么异同?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/3-flavors-of-the-for-loop-i ...
- mybatis简单入门介绍
mybatis入门 简介 什么是mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及 ...
- 利用百度云接口实现车牌识别·python
一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和变异第三方库麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开始 ...
- Event Hub小白入门指南
Event Hub事件中心 本文的目的在于用最白的大白话,让你从“完全不懂”开始,理解什么是分布式大数据流平台Event Hub,并且理解它的关键概念,并且初步理解其收发数据API. 定义,Event ...
- 【php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...
- Map(映射)
散列表介绍: 数组和链表都可以是有序的(即存储顺序与取出顺序一致),但这样是有代价的,需要遍历才可以寻找某一特定元素: 而还有另外的一些存储结构:不在意元素的顺序,能够快速的查找元素的数据 其中就有一 ...
- Java 学习笔记之 Return停止线程
Return停止线程: 使用interrupt()和return结合也可以实现停止线程的效果.不过还是建议使用“抛异常“的方法,因为在catch块中可以将异常向上抛,使线程停止的事件得以传播. pub ...
- egret引擎中使用tiled运行在微信小游戏中
egret的官方文档,对tiled的介绍不是很细致,很多东西都需要摸索.现在把踩的坑记录下来.作为一个备忘 引用tiledmap的库 在GitHub上下载egret的tiledmap支持库:https ...