`
newbee_zc
  • 浏览: 30964 次
文章分类
社区版块
存档分类
最新评论

实现图片懒加载

阅读更多

   1.为需要执行懒加载的<img>标签添加指定属性:

     

<img class="data-daily-image" data-daily-image="${topPic}"
src="/image/custom/loading.gif" title="${name}" alt="${name}" width="360"
height="225" data-img="${topPic}" isload="false"/>

    src:指定图片加载前默认显示的图片;

    data-img:存放我们需要加载的图片地址;

    isload:为需要执行懒加载的标示;

 

   2.添加lazyLoad.js文件,在之前必须要引入jquery

   

/**
 * JS图片延迟加载
 * @constructor {DataLazyLoad}
 * @param {options} 对象传参
 * @time 2014-1-10
 */
/*
 * 延迟加载的原理:滚动时:待加载的资源相对于游览器顶端的距离 - threshold <= 可视区域相对于浏览器顶端的距离 true 就加载
 * 否则的话 不加载
 * 否则的话 不加载
 */
function DataLazyLoad(options){

	this.config = {

		container      :   window,   //容器 默认为window
		threshold      :   -200,        // 离多少像素渲染图片
		event          :  'scroll',  // 默认为scroll(滚动)
		effect         :  'fadeIn',  // 默认为show 也可以为fadeIn, slideDown 等 jQuery 自带的效果
		effectspeed    :  1000,      // 时间
		suffix         :  'img',     // img属性 默认以data-img 也可以自定义后缀
		skip_invisible : true       // 如果img标签为隐藏的 那么不强制加载
	};

	this.cache = {};

	this.init(options);
}

DataLazyLoad.prototype = {

	init: function(options){

		this.config = $.extend(this.config, options || {});
		var self = this,
			_config = self.config,
			_cache = self.cache;

		self._update();

		// 滚动时(或者其他事件) 触发事件
		$(_config.container).unbind(_config.event);
		$(_config.container).bind(_config.event,function(){
			self._update();
		});
	},
	/*
	 * 加载对应的图片
	 */
	_eachImg: function(item) {
		var self = this,
			_config = self.config,
			_cache = self.cache;

		if($(item).attr('isload') == 'false') {
			var dataImg = $(item).attr('data-'+_config.suffix),
				src = $(item).attr('src');
			//$(item).hide();
			$(item).attr('src',dataImg);
			$(item).attr('data-'+_config.suffix,'');
			//$(item)[_config.effect](_config.effectspeed);
			$(item).attr('isload','true');
		}
	},
	_update:function(){
		var self = this,
			_config = self.config,
			_cache = self.cache;
		if(_config.container === window) {

			$('img').each(function(index,item){
				// 如果图片隐藏的 那么不强制加载
				if(_config.skip_invisible && !$('img').is(":visible")) {
					return;
				}
				if (self._abovethetop(item) ||
					self._leftofbegin(item)) {
					// 什么都不处理
				} else if (self._belowthefold(item) &&
					self._belowthefold(item)) {
					self._eachImg(item);
				}
			})

		}else {
			$('img',$(_config.container)).each(function(index,item){
				// 如果图片隐藏的 那么不强制加载
				if(_config.skip_invisible && !$('img').is(":visible")) {
					return;
				}
				if (self._abovethetop(item) ||
					self._leftofbegin(item)) {

				} else if (self._belowthefold(item) &&
					self._rightoffold(item)) {
					self._eachImg(item);
				}

			})
		}

	},
	/*
	 * 往下滚动时 判断待加载的元素是否在可视区域内
	 * @return {Boolean}
	 */
	_belowthefold: function(elem){
		var self = this,
			_config = self.config;
		var fold;
		if(_config.container === window) {
			fold = $(window).height() + $(window).scrollTop();
		}else {
			fold = $(_config.container).offset().top + $(_config.container).height();
		}

		return fold >= $(elem).offset().top - _config.threshold;
	},
	/*
	 * 往右滚动时 判断待加载的元素是否在可视区域内
	 * @return {Boolean}
	 */
	_rightoffold: function(elem){
		var self = this,
			_config = self.config;
		var fold;
		if(_config.container === window) {
			fold = $(window).width() + $(window).scrollLeft();
		}else {
			fold = $(_config.container).offset().left + $(_config.container).width();
		}

		return fold >= $(elem).offset().left - _config.threshold;
	},
	/*
	 * 往上滚动
	 * @return {Boolean}
	 */
	_abovethetop: function(elem){
		var self = this,
			_config = self.config;
		var fold;
		if(_config.container === window) {
			fold = $(window).scrollTop();
		}else {
			fold = $(_config.container).offset().top;
		}
		return fold >= $(elem).offset().top + _config.threshold  + $(elem).height();
	},
	/*
	 * 往左滚动
	 * @return {Boolean}
	 */
	_leftofbegin: function(elem) {
		var self = this,
			_config = self.config;
		var fold;

		if (_config.container === window) {
			fold = $(window).scrollLeft();
		} else {
			fold = $(_config.container).offset().left;
		}
		return fold >= $(elem).offset().left + _config.threshold + $(elem).width();
	}

};

// 初始化的方式
$(function(){

	var datalazy = new DataLazyLoad({
		container: window
	});
});

 

 

   3.在html页面完全加载完毕后执行初始化(必须在$(document).ready(function(){})中执行初始化)

   

$(document).ready(function() {
	var datalazy = new DataLazyLoad({
		container: window
	});
});

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ionic+requirejs实现图片懒加载

    标题 "ionic+requirejs实现图片懒加载" 描述了一个使用Ionic框架和RequireJS库来创建一个具有图片懒加载功能的移动应用项目。这个项目旨在优化用户体验,特别是在移动设备上,通过延迟加载非可视区域的图片,减少...

    shopex实现图片懒加载所需的jq文件

    标题 "shopex实现图片懒加载所需的jq文件" 涉及到的是在ShopEx电子商务平台中,通过JavaScript库jQuery和其扩展插件jQuery LazyLoad来优化网页性能的技术。ShopEx是一个国内知名的开源电商系统,而图片懒加载是提高...

    前端实现图片懒加载url

    前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现图片懒加载url前端实现...

    用jquery实现图片懒加载.zip_jquery登录页面

    jquery实现图片懒加载.zip

    JavaScript实现图片懒加载 图片懒加载是一种在页面加载时,延迟加载图片资源的技术,也就是说图片资源在需要的时候才会加载

    首先,实现图片懒加载的核心在于监听滚动事件。在JavaScript中,可以使用`window.onscroll`或`window.addEventListener('scroll', callback)`来监听滚动事件。当用户滚动页面时,回调函数会被触发,检查图片是否已经...

    项目中实现图片懒加载的几种方式

    在Vue项目中,可以利用vue-lazyload插件来实现图片懒加载。首先,通过npm安装该插件,然后在main.js中全局引入并配置。在模板中,将图片的`:src`属性替换为`v-lazy`,并将图片的真实路径作为值传入。vue-lazyload会...

    微信小程序实现图片懒加载的示例代码

    微信小程序实现图片懒加载的示例代码 微信小程序实现图片懒加载的示例代码是指通过在页面预加载图片,提高用户体验度的一种技术。这种技术可以在微信小程序中实现,通过预加载图片,减少用户等待的时间,提高用户...

    前端实现图片懒加载(lazyload)的两种方式

    在前端开发中,图片懒加载(Lazy Load)是一种优化网页性能的技术,它允许网页只在用户滚动到可视区域时才加载图片,而不是一次性加载所有图片。这样可以显著减少页面初始加载时间,提升用户体验,尤其在处理大量...

    JQuery实现图片懒加载demo

    JQuery实现图片懒加载demo,实现了图片预加载和图片懒加载两种方式。

    JQuery实现页面图片懒加载效果仅需两行代码

    现在我们已经准备好了基本环境,只需要两行代码就能启用图片懒加载功能。首先,给需要懒加载的图片添加一个特定的CSS类,例如`lazy`: ```html ``` 这里,`data-src`属性用于存储图片的真实URL,而`src`属性可以...

    layui图片懒加载.txt

    本文将详细介绍如何在LayUI框架中实现图片懒加载功能。 #### 二、图片懒加载原理 图片懒加载的基本原理是在页面初始化时仅加载可视区域内的图片资源,对于不可视区域内的图片,则延迟加载。当用户滚动页面使图片...

    简单的图片懒加载实现

    在实现简单的图片懒加载时,我们通常会遵循以下步骤: 1. **数据存储**:首先,我们需要在HTML中为每个图片元素添加一些额外的数据属性,如`data-src`,用于存储原始图片URL,而不在`src`属性中直接设置。这样...

    js实现PC端移动端通用的图片懒加载.rar

    实现图片懒加载的关键在于以下几个步骤: 1. **数据属性标记**:为需要懒加载的图片添加一个特殊的data属性,例如`data-src`,存储原始图片URL。HTML代码中的`src`属性可以设置为一个低质量的占位符,或者一个简单...

    jQuery图片懒加载代码

    jQuery中的$.fn.extend()方法可以用来扩展jQuery的功能,例如创建自定义插件,实现图片懒加载。 **图片懒加载实现原理** 1. **数据属性**:首先,我们为需要懒加载的图片设置一个特殊的`data-`属性,如`data-src`...

    网页图片懒加载jquery插件

    jQuery是一个广泛使用的JavaScript库,提供了丰富的API和便利的DOM操作,使得实现图片懒加载变得更为简单。 本资源提供了一个基于jQuery的图片懒加载插件。jQuery插件通常由$.fn.extend()方法创建,通过扩展jQuery...

    vue指令实现页面图片懒加载鼠标滚动图片开始加载

    Vue 指令是Vue.js框架提供的一种自定义行为方式,通过创建自定义指令,我们可以实现图片懒加载功能,即当图片进入浏览器视口时才开始加载,这样可以有效地节省带宽,提高页面的加载速度。 图片懒加载的核心原理在于...

    angular实现图片懒加载实例代码

    AngularJS,作为一个强大的前端框架,提供了多种实现图片懒加载的方法。本文将详细介绍如何在Angular中实现图片懒加载,并解决在实际应用中可能遇到的问题。 首先,我们提到的“angular-imglazyload”是一个...

    推荐移动端网页使用的图片懒加载

    **实现图片懒加载的关键步骤:** 1. **检测滚动事件**:监听`scroll`事件,当用户滚动页面时,判断图片是否进入可视区域。 2. **计算图片位置与视口的关系**:通过JavaScript获取图片相对于视口的位置信息,如`...

    图片懒加载

    1. **JavaScript库**:有很多现成的JavaScript库,如jQuery Lazy、lozad.js等,可以帮助开发者快速实现图片懒加载。这些库通常提供API,允许开发者自定义占位符、加载动画和触发加载的事件(如滚动、触摸滑动等)。 ...

    IntersectionObserver实现图片懒加载的示例

    以下是一个使用Intersection Observer API实现图片懒加载的示例: ```html &lt;!DOCTYPE html&gt; .list-item { height: 400px; margin: 5px; background-color: lightblue; list-style: none; } .list-item-...

Global site tag (gtag.js) - Google Analytics