[转]LazyLoad.js及scrollLoading.js
本文转自:http://blog.csdn.net/ning109314/article/details/7042829
目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片)。现在最流行使用的就是LazyLoad.js及scrollLoading.js这两个用Jquery写的小插件。
一、LazyLoad实现:
<script type="text/javascript" src="/js/lazyload/jquery.min.js"></script> < script type="text/javascript" src="/js/lazyload/lazyload.js"></script> < script type="text/javascript"> jQuery(document).ready( function($){ $("img").lazyload({ effect : "fadeIn" }); }); < /script>
网上找到一个更好点的处理方式,以下方式转自http://www.poluoluo.com/jzxy/201110/145261.html:
<script type="text/javascript">
//首先用JQ判断浏览器类型及版本,如果是IE8以下的浏览器就用effect=show,否则就用effect=fadeIn,判断浏览器版本函数如下 function checkbrowse() { var ua = navigator.userAgent.toLowerCase(); var is = (ua.match(/\b(chrome|opera|safari|msie|firefox)\b/) || ['', 'mozilla'])[1]; var r = '(?:' + is + '|version)[\\/: ]([\\d.]+)'; var v = (ua.match(new RegExp(r)) || [])[1]; jQuery.browser.is = is; jQuery.browser.ver = v; return { 'is': jQuery.browser.is, 'ver': jQuery.browser.ver } }
//改造Jquery.LazyLoad.js函数,根据浏览器版本来显示不同的滤镜效果 var public = checkbrowse(); var showeffect = ""; if ((public['is'] == 'msie' && public['ver'] < 8.0)) { showeffect = "show" } else { showeffect = "fadeIn" } jQuery(document).ready(function($) { $("img").lazyload({ placeholder: "http://demo.jb51.net/js/2011/lazyload/Js/lazyload/grey.gif", effect: showeffect, failurelimit: 10 }) }); < /script>
html:
<img src="/js/lazyload/pixel.gif" original="真实图片路径" />
而LazyLoad只是给你一个延迟加载的假象,每次图片都会加载两次,完全就是一个假象的延迟加载。可以修改LazyLoad文件实现真实延迟加载,本人比较懒,就直接在网上找了一个修改好的,嘿嘿
- /*
- * Lazy Load - jQuery plugin for lazy loading images
- *
- * Copyright (c) 2007-2009 Mika Tuupola
- *
- * Licensed under the MIT license:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Project home:
- * http://www.appelsiini.net/projects/lazyload
- *
- * Version: 1.5.0
- *
- */
- (function ($) {
- $.fn.lazyload = function (options) {
- var settings = {
- threshold: 0,
- failurelimit: 0,
- event: "scroll",
- effect: "show",
- container: window
- };
- if (options) {
- $.extend(settings, options);
- }
- /* Fire one scroll event per scroll. Not one scroll event per image. */
- var elements = this;
- if ("scroll" == settings.event) {
- $(settings.container).bind("scroll", function (event) {
- var counter = 0;
- elements.each(function () {
- if ($.abovethetop(this, settings) ||
- $.leftofbegin(this, settings)) {
- /* Nothing. */
- } else if (!$.belowthefold(this, settings) &&
- !$.rightoffold(this, settings)) {
- $(this).trigger("appear");
- } else {
- if (counter++ > settings.failurelimit) {
- return false;
- }
- }
- });
- /* Remove image from array so it is not looped next time. */
- var temp = $.grep(elements, function (element) {
- return !element.loaded;
- });
- elements = $(temp);
- });
- }
- this.each(function () {
- var self = this;
- //删除的代码
- /*
- * Lazy Load - jQuery plugin for lazy loading images
- *
- * Copyright (c) 2007-2009 Mika Tuupola
- *
- * Licensed under the MIT license:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Project home:
- * http://www.appelsiini.net/projects/lazyload
- *
- * Version: 1.5.0
- *
- */
- (function ($) {
- $.fn.lazyload = function (options) {
- var settings = {
- threshold: 0,
- failurelimit: 0,
- event: "scroll",
- effect: "show",
- container: window
- };
- if (options) {
- $.extend(settings, options);
- }
- /* Fire one scroll event per scroll. Not one scroll event per image. */
- var elements = this;
- if ("scroll" == settings.event) {
- $(settings.container).bind("scroll", function (event) {
- var counter = 0;
- elements.each(function () {
- if ($.abovethetop(this, settings) ||
- $.leftofbegin(this, settings)) {
- /* Nothing. */
- } else if (!$.belowthefold(this, settings) &&
- !$.rightoffold(this, settings)) {
- $(this).trigger("appear");
- } else {
- if (counter++ > settings.failurelimit) {
- return false;
- }
- }
- });
- /* Remove image from array so it is not looped next time. */
- var temp = $.grep(elements, function (element) {
- return !element.loaded;
- });
- elements = $(temp);
- });
- }
- this.each(function () {
- var self = this;
- //删除的代码
- /* When appear is triggered load original image. */
- $(self).one("appear", function () {
- if (!this.loaded) {
- $("<img />")
- .bind("load", function () {
- $(self)
- .hide()
- .attr("src", $(self).attr("original"))
- [settings.effect](settings.effectspeed);
- self.loaded = true;
- })
- .attr("src", $(self).attr("original"));
- };
- });
- /* When wanted event is triggered load original image */
- /* by triggering appear. */
- if ("scroll" != settings.event) {
- $(self).bind(settings.event, function (event) {
- if (!self.loaded) {
- $(self).trigger("appear");
- }
- });
- }
- });
- /* Force initial check if images should appear. */
- $(settings.container).trigger(settings.event);
- return this;
- };
- /* Convenience methods in jQuery namespace. */
- /* Use as $.belowthefold(element, {threshold : 100, container : window}) */
- $.belowthefold = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).height() + $(window).scrollTop();
- } else {
- var fold = $(settings.container).offset().top + $(settings.container).height();
- }
- return fold <= $(element).offset().top - settings.threshold;
- };
- $.rightoffold = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).width() + $(window).scrollLeft();
- } else {
- var fold = $(settings.container).offset().left + $(settings.container).width();
- }
- return fold <= $(element).offset().left - settings.threshold;
- };
- $.abovethetop = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).scrollTop();
- } else {
- var fold = $(settings.container).offset().top;
- }
- return fold >= $(element).offset().top + settings.threshold + $(element).height();
- };
- $.leftofbegin = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).scrollLeft();
- } else {
- var fold = $(settings.container).offset().left;
- }
- return fold >= $(element).offset().left + settings.threshold + $(element).width();
- };
- /* Custom selectors for your convenience. */
- /* Use as $("img:below-the-fold").something() */
- $.extend($.expr[':'], {
- "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
- "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
- "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
- "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
- });
- })(jQuery);
- /* When appear is triggered load original image. */
- $(self).one("appear", function () {
- if (!this.loaded) {
- $("<img />")
- .bind("load", function () {
- $(self)
- .hide()
- .attr("src", $(self).attr("original"))
- [settings.effect](settings.effectspeed);
- self.loaded = true;
- })
- .attr("src", $(self).attr("original"));
- };
- });
- /* When wanted event is triggered load original image */
- /* by triggering appear. */
- if ("scroll" != settings.event) {
- $(self).bind(settings.event, function (event) {
- if (!self.loaded) {
- $(self).trigger("appear");
- }
- });
- }
- });
- /* Force initial check if images should appear. */
- $(settings.container).trigger(settings.event);
- return this;
- };
- /* Convenience methods in jQuery namespace. */
- /* Use as $.belowthefold(element, {threshold : 100, container : window}) */
- $.belowthefold = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).height() + $(window).scrollTop();
- } else {
- var fold = $(settings.container).offset().top + $(settings.container).height();
- }
- return fold <= $(element).offset().top - settings.threshold;
- };
- $.rightoffold = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).width() + $(window).scrollLeft();
- } else {
- var fold = $(settings.container).offset().left + $(settings.container).width();
- }
- return fold <= $(element).offset().left - settings.threshold;
- };
- $.abovethetop = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).scrollTop();
- } else {
- var fold = $(settings.container).offset().top;
- }
- return fold >= $(element).offset().top + settings.threshold + $(element).height();
- };
- $.leftofbegin = function (element, settings) {
- if (settings.container === undefined || settings.container === window) {
- var fold = $(window).scrollLeft();
- } else {
- var fold = $(settings.container).offset().left;
- }
- return fold >= $(element).offset().left + settings.threshold + $(element).width();
- };
- /* Custom selectors for your convenience. */
- /* Use as $("img:below-the-fold").something() */
- $.extend($.expr[':'], {
- "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
- "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
- "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
- "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
- });
- })(jQuery);
二、scrollLoading实现
<script src="/js/lazyload/jquery.scrollLoading.js" type="text/javascript"></script><script type="text/javascript" src="/js/lazyload//jquery_002.js"></script> < script type="text/javascript" src="/js/lazyload//jquery.js"></script> < script> $(function() { $(".scrollLoading").scrollLoading(); }); < /script>
HTML:
<img class="scrollLoading" style="background: url("/js/lazyload/pixel.gif") no-repeat scroll center center transparent;" src="/js/lazyload/pixel.gif" style="WIDTH: 526px; HEIGHT: 293px" data-url="真实路径"/>
scrollLoading的实现相对而言比较麻烦一下
如果需要对应的JS包请去下载:
http://download.csdn.net/detail/ning109314/3882760
[转]LazyLoad.js及scrollLoading.js的更多相关文章
- LazyLoad.js及scrollLoading.js
http://blog.csdn.net/ning109314/article/details/7042829 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动预加载(加 ...
- 插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js
插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...
- 两种图片延迟加载的方法总结jquery.scrollLoading.js与jquery.lazyload.js
估计网上能查到的最多的两种图片延迟加载方法就是jquery.scrollLoading.js与jquery.lazyload.js了,其中jquery.lazyload.js的调用方法因为有网友爆出的 ...
- 两种图片延迟加载的方法总结jquery.scrollLoading.js与jquery.lazyload.js---转载
jquery.scrollLoading方法 html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...
- 图片延迟加载scrollLoading.js应用
<ul> <li><a href="http://news.qq.com/" target="_b ...
- 页面滚动图片等元素动态加载插件jquery.scrollLoading.js
如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的 ...
- jq:jQuery库文件jquery.scrollLoading.js使用方法
图片延迟加载,滚动到哪里加载到哪里: 1:头部加载库文件 <script type="text/javascript" src="/js/jquery.scroll ...
- 记录:sea.js和require.js配置 与 性能对比
最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...
- MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...
随机推荐
- [译]Javascript数列的push和pop方法
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- Web性能权威指南 PDF扫描版
Web性能权威指南是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物.<Web性能权威指南>目标是涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识.全书 ...
- winform GDI基础(二)画带圆角的矩形框
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode ...
- Insus Paging Utility Version 2
Insus.NET对GridView或是DataList分页,都是使用自己的分页组件:http://www.cnblogs.com/insus/archive/2009/03/19/1417102.h ...
- 个人JS体系整理(二)
一. eval eval()函数计算JavaScript字符串,并把它作为脚本代码来执行.如果参数是一个表达式,eval()函数将执行表达式.如果参数是Javascript语句,eval()将执行Ja ...
- Python3中集合的混合使用
比较简单没什么好说的: list_1 = [1,2,3,4,6,3,2,5,7,8,2,1] list_1 = set(list_1) list_1.add(999) list_2 = set([2, ...
- Spring MVC零配置(全注解)(版本5.0.7)
// 核心配置类 package spittr.config; import org.springframework.web.servlet.support.AbstractAnnotationCon ...
- 魔法少女 LJJ——线段树
题目 [题目描述] 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女 LJJ 已经觉得自己见过世界上的所有稀奇古怪的事情了. LJJ 感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处 ...
- ios swift UITextView高度自适应
在ios开发中,用到多行输入时一般都会用到UITextView.常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大.其实实现这个功能也不是很难,只需要 ...
- P3272 [SCOI2011]地板
\(\color{#0066ff}{ 题目描述 }\) lxhgww的小名叫"小L",这是因为他总是很喜欢L型的东西.小L家的客厅是一个R*C的矩形,现在他想用L型的地板来铺满整个 ...