javascript图片预加载
图片预加载是非常常见的一个功能,PC和移动端都会用到,尤其是在移动端,只要涉及到较多图片的加载都会用到该技术。下面是移动端用到的,引入了zepto。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lazyload</title>
<style type="text/css">
*{margin:0;padding:0;}
.img-wrap{width:100%;overflow: hidden;background-repeat: no-repeat;background-size: cover;}
.img-wrap img{width:100%;}
</style>
</head>
<body>
<div class="lazyload-wrap">
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
<div class="img-wrap">
<img class="util-lazyload" data-origin="images/img1.jpg" src="data:images/placehold.png"/>
</div>
</div>
<script type="text/javascript" src="script/zepto.min.js"></script>
<script type="text/javascript" src="script/lazyload.js"></script>
</body>
</html>
lazyload.js:
var lazyload = function(container) {
var lazyClsName = "util-lazyload";//图片样式名
var $container = container;
var threshold = 1;
//获取容器下面需要懒加载的元素
function getLazyElements(container) {
return $container.find("." + lazyClsName);
}
//浏览器滚动轴滚动
var handleScroll = function() {
var elements = getLazyElements(container);
elements.each(function() {
if (!belowTheFold($(this))) {
$(this).trigger("appear");
}
});
for (var i = 0, length = elements.length; i < length; i++) {
if (elements[i].loaded === true) {
$(elements[i]).removeClass(lazyClsName);
}
}
};
if ($container.data("lazyload") !== true) {
$(window).on('scroll', handleScroll);
$container.on("appear", "." + lazyClsName, function(e) {
var target = e.target;
if (target.loaded !== true) {
preload($(target));
target.loaded = true;
}
});
$(container).data('lazyload', true);
}
//图片预加载
function preload(element) {
var img = document.createElement('img'),
src = element.attr('data-origin');
$(img).bind("load", function() {
element.parent().css('backgroundImage', 'url(' + src + ')');
element.css('visibility', 'hidden');
})
.bind('error', function() {
$self.css('visibility', 'visible');
})
.attr("src", src);
}
//判断是否在可视区域
function belowTheFold(element, threshold) {
var fold = window.innerHeight + window.scrollY;
return fold <= $(element).offset().top;
}
/* Force initial check if images should appear. */
setTimeout(handleScroll, 0);
return $(container);
};
lazyload($(".lazyload-wrap"));
javascript图片预加载的更多相关文章
- Javascript图片预加载详解
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 再谈javascript图片预加载技术
图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展 ...
- javascript 图片预加载
<!DOCTYPE > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- javascript图片懒加载与预加载的分析
javascript图片懒加载与预加载的分析 懒加载与预加载的基本概念. 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片, ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法(转)
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- Javascript兑现图片预加载【回调函数,多张图片】 (转载)
Javascript实现图片预加载[回调函数,多张图片] 使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多 ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
随机推荐
- 使用单个httpclient实例请求数据。
做J2EE的都知道httpclient这个工具,Android也自带这个工具,不过和J2EE上的不一样,可能是google在添加的时候,自己修改了一部分代码. 在J2EE中可以使用如下代码,在多线程的 ...
- 安装ubuntu server时候的多网卡问题
安装的时候看到多个网卡,eth0,eth1,到系统中后只看见eth0 1.输入 ifconfig -a,这个时候如果能够看到多网卡,则在/etc/network/.interfaces中配置一下网卡就 ...
- ORACLE的WITH语句的一个疑惑
使用WITH语句,更新表数据,不行: WITH VN AS ( SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN ...
- springboot(十)-监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? ...
- dockerfile封装docker镜像
一.使用都dockerfile封装docker镜像 1.在任意一个地方创建文件夹docker mkdir docker 2.进入文件夹并且下载一个django2.1.7的包以及一个epel.repo ...
- Python爬虫常用之登录(一) 思想
爬虫主要目的是获取数据,常见的数据可以直接访问网页或者抓包获取,然后再解析即可. 一些较为隐私的数据则不会让游客身份的访问者随便看到,这个时候便需要登录获取. 一般获取数据需要的是登录后的cookie ...
- 在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 <!-- 把需要生成截图的元素放在一个元素容器里,设置一个ref --> <di ...
- HttpClient登陆后获取并携带cookies发起请求
最近项目中,用到了登陆后获取并携带cookies发起请求的业务场景,现总结写出来备忘一下. 1.定义存取cookies信息的全局变量 public class HttpUtil { /** * 用来存 ...
- 2019年UX设计新趋势
UX设计总是在不断变化中.最近短短两年的时间里,我们已经看到,很多地方都大规模采用颠覆性技术,比如语音用户界面,混合现实和智能家居设备.设计这些体验的实际过程可能保持不变,但新技术的出现引发了新的行为 ...
- unity3d vscode
原来unity3d里assets store有一个插件,下载就行了,插件名就叫vscode 下载完了之后,preference里就会出现,vscode,Enable Integration 这一项勾上 ...