博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jquery.ScrollLoading图片延迟加载技术
阅读量:4132 次
发布时间:2019-05-25

本文共 2731 字,大约阅读时间需要 9 分钟。

关于分屏加载图片,像天猫、京东等电商图片较多页面很长,就采用了延迟加载技术。

目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的,

随着页面的滚动,显示区域图片才被动态加载。

原理其实很简单,默认<img>标签中设置一个特别小的让人看不见的图片作为原始src路径,

再自定义一个属性存放原图片路径,通过绑定滚动事件,检查当前元素是否在浏览器窗口中,

然后替换src路径动态加载图片。

最后发现了一个大神写的jQuery滚动加载插件scrollLoading测试很好用。

源码如下:

(function($) {	$.fn.scrollLoading = function(options) {		var defaults = {			attr: "data-url",			container: $(window),			callback: $.noop		};		var params = $.extend({}, defaults, options || {});		params.cache = [];		$(this).each(function() {			var node = this.nodeName.toLowerCase(), url = $(this).attr(params["attr"]);			//重组			var data = {				obj: $(this),				tag: node,				url: url			};			params.cache.push(data);		});				var callback = function(call) {			if ($.isFunction(params.callback)) {				params.callback.call(call.get(0));			}		};		//动态显示数据		var loading = function() {						var contHeight = params.container.height();			if (params.container.get(0) === window) {				contop = $(window).scrollTop();			} else {				contop = params.container.offset().top;			}								$.each(params.cache, function(i, data) {				var o = data.obj, tag = data.tag, url = data.url, post, posb;								if (o) {					post = o.offset().top - contop, posb = post + o.height();					if ((post >= 0 && post < contHeight) || (posb > 0 && posb <= contHeight)) {						if (url) {							//在浏览器窗口内							if (tag === "img") {								//图片,改变src								callback(o.attr("src", url));									} else {								o.load(url, {}, function() {									callback(o);								});							}								} else {							// 无地址,直接触发回调							callback(o);						}						data.obj = null;						}				}			});			};				//事件触发		//加载完毕即执行		loading();		//滚动执行		params.container.bind("scroll", loading);	};})(jQuery);

scrollLoading使用

首先调用jQuery库文件,还有jquery.scrollLoading.js,

此插件的方法名就是scrollLoading,所以,直接:包装器.scrollLoading();就可以实现滚动加载效果了
$(".scrollLoading").scrollLoading();
表示所有class为scrollLoading的元素绑定了滚动加载的方法。
当然,不可能真的就如此简单,我们还需要做点小动作的。元素默认是不加载的,那么真正的加载地址显然要预先在元素上放置的
在HTML5中,以data-开头的自定义属性都是合法的,且地址可以是图片,页面等。所以,我设定了绑定地址的自定义属性为”data-url”,此属性值设为真实的图片(或页面)地址就可以了。例如下面:
加载中...

会在滚动时加载名为loaded.html的页面,并自动替换里面的内容。

对于常用的图片,还有一点小问题,就是其默认的src图片地址。其src地址不能是真实的图片地址(否则会直接一次性全部加载),也不能是空地址或是坏地址,否则IE浏览器下会出现红叉叉。我的做法是默认链接的是一个1px * 1px的gif透明图片(大小很小),同时可以透出后面加载中gif动画图片,当滚动加载的时候直接把此gif图片替换掉。于是,对于图片,可能就有类似下面的代码:

scrollLoading可选参数

两个可选参数,一个为container表示容器,另一个为callback表示回调。具体参见下表:

参数 默认 释义
attr data-url 获取元素加载地址的属性名
container $(window) 滚动的容器。默认为$(window),也就是默认的网页滚动。
callback $.noop 回调。元素动态加载完毕后执行的回调函数。其中回调函数的上下文this就是当前DOM元素。注意:如果无法获取元素加载地址,则不执行动态加载,但是会触发回调。在某些需求下,您可以缺省url值,仅仅触发回调。
绑定JavaScript代码如下:
$(".scrollLoading").scrollLoading({    container: $("#zxxMainCon"),    callback: function() {        this.style.border = "3px solid #a0b3d6";	    }});

转自

转载地址:http://mijvi.baihongyu.com/

你可能感兴趣的文章
pytorch(三)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>