js里一说到延迟加载,大都离不开两种情形,即外部Js文件的延迟加载,以及网页图片的延迟加载:

1.首先简单说一下js文件的3种延迟加载方式:

(1)<script type=”text/javascript” defer>,defer属性可以推迟对脚本的解释,直到文档已经显示给用户为止,但只有IE支持defer属性

(2)设置具体的延迟时间,对应的js代码如下:

function loadScript(){
var myScript=document.createElement("script");
myScript.src="dafu.js";
document.body.appendChild(myScript);
}
setTimeout(function(){
loadScript();
},1000)

(3)采用js监听,直到文档加载完才会加载指定的外部js文件,对应的js代码如下:

if (window.addEventListener){
window.addEventListener("load", loadScript, false);
}else if (window.attachEvent){
window.attachEvent("onload", loadScript);
}else {
window.onload = loadScript;
}

2.接下来针对图片的延迟加载,说一下自己用过的两款不错的插件:

(1)基于jquery类库的jquery.lazyload.js(1.9+),废话不多说,直接上代码,先上布局:

<div class="demo" style="width: 736px; margin:1000px auto;">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-1.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-2.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-3.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-4.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-5.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-6.jpg">
<img class="lazy" src="data:images/blank.gif" data-original="images/big-7.jpg">
</div>

注意,css样式里面我是给的.demo img { width: 100%; height: 490px;},这样给图片添加width和height属性有助于在图片未加载时占满所需要的空间;另外,在src属性中设置占位图片,例如1x1像素的灰色图片或者loading的gift动图,然后在data-original中设置真实的图片URL,当然src中设置嫌麻烦可以去实例化的参数设置中写。

然后就是js部分的代码:

$("img").lazyload({
placeholder:"images/loading.gif", //设定一个占位图片,待图片加载时,占位图则会隐藏,优先调用标签行内属性src对应的占位图
data_attribute:"original", //真实图片地址的data属性后缀,默认为original
effect:"fadeIn", //默认地使用show()方法来将图显示出来,还可以使用其他特效(fadeIn,slideDown)来处理
threshold:40, //默认情况下图片会出现在屏幕时加载,threshold可令图片在距离屏幕多少像素时提前加载,做到不让用户察觉
effectspeed:500,//作为effect的参数使用表示动画时间,默认为undefined
// event:"click", //默认情况下处于等待状态, 直到用户滚动到窗口上图片所在位置才开始加载图片,这里可以设置成某个事件触发加载(click(点击),mouseover(鼠标划过),sporty(运动的),foobar(…))
// container: $("#container"), //默认在拉动浏览器滚动条时生效,这里可以将插件用在可滚动容器的图片上
failure_limit:10, //默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况,failurelimit意在加载N张可见区域外的图片,以避免出现这个问题
// skip_invisible:false //默认忽略了隐藏图片. 将skip_invisible设为false加载隐藏图片
//图片加载时的事件,有 2 个参数:elements_left(未加载的图片数量)、settings(lazyload的参数)
appear: function(num,setting){
console.log("一开始还剩"+num+"张未加载")
},
//图片加载后的事件,有2个参数,同appear
load: function(num,setting){
console.log("接着还剩"+num+"张未加载")
}
});
//页面加载完成5秒后, 指定区域内的图片会自动进行加载
$(window).on("load", function() {
setTimeout(function() {$("img").trigger("click")}, 5000);
});
//监听每张图片加载完毕
$("img").on("load",function(){
console.log("刚加载的这张图片的下标是"+$(this).index());
})

大部分功能都能实现,感觉不太好的就是不能直接给图片设置明确的延迟加载时间,详细介绍请移步http://code.ciaoca.com/jquery/lazyload/

(2)轻量级插件echo.js,脱离jquery类库,还能直接设置明确的延迟加载时间,html部分的代码和上面有一些类似:

<div class="demo" style="width: 736px; margin:1000px auto;">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-1.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-2.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-3.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-4.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-5.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-6.jpg">
<img class="lazy" src="data:images/blank.gif" data-echo="images/big-7.jpg">
</div>

注意:如果直接自定义一张占位图片,可能会造成图片的变形等,这里可以先准备一张1*1px透明gif图片(blank.gif),然后用一个loading图片作背景,即.demo img { width: 100%; height: 490px; background: url(images/loading.gif) no-repeat 50%;}

然后直接上js部分的代码:

//实例化echo
echo.init({
offset:0,//设置上下左右距离viewport到多少就开始加载图片,默认为0,即只加载出现在可视区中的图片,参数取值越大,加载的图片就会越多
// offsetVertical:40,//垂直方向距离viewport多少就开始加载图片,默认值为0
// offsetHorizontal:0,//水平方向距离viewport多少就开始加载图片,默认值为0
// offsetTop:0, //顶部方向距离viewport多少就开始加载图片,默认值为offsetVertical
// offsetButton:0, //底部方向距离viewport多少就开始加载图片,默认值为offsetVertical
// offsetLeft:0, //左边方向距离viewport多少就开始加载图片,默认值为offsetHorizontal
// offsetRight:0, //右边方向距离viewport多少就开始加载图片,默认值为ooffsetHorizontal
throttle:1000,//设置图片延迟加载时间
callback: function (element, op) {
if(op === 'load') {
element.classList.add('loaded');
} else {
element.classList.remove('loaded');
}
console.log(element, 'has been', op + 'ed')//传递已更新的元素和操作(load或者unload)
},
unload:false//默认为false,即当图片滑动超过了viewport的时候不在加载已经加载过的图片
});
//监听每张图片加载完毕
$("img").on("load",function(){
console.log($(this).index());
})

主要功能都测试过,没有明显的问题,还有个echo.reader()的方法没怎么用到,有兴趣的码友可以去试一下~

延迟加载外部js文件,延迟加载图片(jquery.lazyload.js和echo,js)的更多相关文章

  1. 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件

    在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件  当触发事件时候 会把当前的dom传给该方法

  2. jq常用事件(on,blur,focus,change),js/jq等待图片(页面)加载完毕事件,js读取文件

    jq常用事件(on,blur,focus,change) // 方法一(推荐) $('.box').on( "click",function() {} ) $('.box').on ...

  3. webpack 打包出多个HTML文件,多个js文件,图片文件放置到指定文件夹中

    一.webpack.config.js简单代码 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { ...

  4. webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件

    在项目中经常会需要将一些接口的配合文件或者某些样式文件,分离出来单独打包,便于后期改动,这里我以css文件为例,介绍实现两种方法: 项目目录: 如上图所示,现在我需要将项目中的scBtn.css文件单 ...

  5. 图片懒加载插件echo.js——改造

    今天做一个列表项需要用到懒加载,搜到网友推荐的echo.js,试用了一下,还不错.除了懒加载,还提供了throttle——节流,即用户快速滑动列表时,很快滑过的项的图片不会加载,只会加载最后停下来的位 ...

  6. jQuery图片延迟加载插件jquery.lazyload.js

    在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...

  7. jquery.lazyload.js图片延迟加载(懒加载)--转载

    一.插件介绍 jquery.lazyload.js 是一个用 JavaScript 编写的jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动 ...

  8. 两种图片延迟加载的方法总结jquery.scrollLoading.js与jquery.lazyload.js

    估计网上能查到的最多的两种图片延迟加载方法就是jquery.scrollLoading.js与jquery.lazyload.js了,其中jquery.lazyload.js的调用方法因为有网友爆出的 ...

  9. jQuery图片延迟加载插件jQuery.lazyload

      插件描述:jQuery图片延迟加载插件jQuery.lazyload,使用延迟加载在可提高网页下载速度.在某些情况下,它也能帮助减轻服务器负载. 使用方法 引用jquery和jquery.lazy ...

  10. jQuery图片延迟加载插件jQuery.lazyload使用方法(转)

    使用方法 1.引用jquery和jquery.lazyload.js到你的页面 <script src="jquery-1.11.0.min.js"></scri ...

随机推荐

  1. Redis简单案例(三) 连续登陆活动的简单实现

    连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送游戏币之类的东西,商城就送一些礼券.正值国庆,应该也有不 ...

  2. Asp.net 面向接口可扩展框架之业务规则引擎扩展组件

    随着面向接口可扩展框架的继续开发,有些功能开发出现了"瓶颈",有太多的东西要写死才好做.但写死的代码扩展性是非常的不好,迷茫中寻找出入... 进而想到我以前开发的好几个项目,都已有 ...

  3. Hive学习笔记(一)

    摘要: Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机制.H ...

  4. Exception thrown by the agent : java.rmi.server.ExportException: Port already in use

    今天有个应用一直起不来,感觉配置都对啊,奇了怪了.看日志发现如下: STATUS | wrapper | 2017/01/04 08:09:31 | Launching a JVM...INFO | ...

  5. jqGrid插件getCol方法的一个改进

    jgGrid插件是非常常用的一个基于jQuery的表格插件,功能非常强大.我最近也频繁使用.但是这个插件也有一些不够完善的地方.比如这个getCol方法. getCol方法接受三个参数 colname ...

  6. css3制作炫酷导航栏效果

    今天主要利用hover选择器.鼠标滑过查看效果. 一.普通导航栏 Home Content Service Team Contact 对于这种普通的导航栏,只是鼠标滑过的时候颜色会变,所以思路变得很简 ...

  7. Ueditor上传图片后自定义样式类名

    Ueditor是百度的一个富文本插件,如果使用者会前端语言的话,那适用性就很好,特别是现在移动端纵横的情况.但往往使用者并不懂编程,要让他们使用前端语言的话是不可能的,这就需要我们在开发时就定义好整个 ...

  8. ip命令和ifconfig命令(转载)

    Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  9. Android 内存泄漏的一些情况。

    最近在维护代码,发现一个自定义View(这个View是在一个AsyncTask的工作线程doInBackground中新建的,在UI线程onPostExecute中添加进window中的)经常会泄漏内 ...

  10. 安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置

    今天安装cocoapods #移除原有ruby源 $ gem sources --remove https://rubygems.org/ #使用可用的淘宝网 $ gem sources -a htt ...