JavaScript实现懒加载

常用的懒加载是图片懒加载,jquery提供了很好的实现

本例要讲的是对某一类进入【可视区域】的元素,进行懒加载

这里的懒加载可以是加载一张图片,也可是ajax异步加载内容

比如:页面如果非常丰富并且很长,需要用户翻页浏览的情况下

如果要对若干板块进行懒加载,可以按照本例的思路简单实现一个

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
	
	//dom加载完之后获取各个容器距离容器顶部的高度
	var asyncOffsets = [];
	$(function(){
		asyncOffsets = getOffset();
		
		// 页面加载完毕之后就主动触发一次scroll事件,因为页面顶部可能存在已经进入【可视区域】的元素
		$(window).trigger('scroll');
	});
	
	// 获取每个div元素的偏移量
	function getOffset(){
		var offsets = [];
		$("div[async=async]").each(function(){
			offsets.push($(this).offset().top);
		});
		return offsets;
	}
	
	// 监听窗口滚动事件
	$(window).scroll(function(){
		// 可视区域高度
		var see = $(this).height();
		// 当前文档整体高度
		var scroll = $(document).scrollTop();
		// 打印
		//console.info("可视区域高度:" + see + ";滚动条到顶部的高度:" + scroll);
		
		// 如果 (浏览器可视高度 + 当前滚动条高度 > 元素的offsetTop) 
		// 说明当前元素已经进入【可视区域】
		// 对当前进入可视区域的元素:触发一些事件,比如是img标签实现懒加载
		// 或者异步加载一些区域的内容
		
		// 遍历需要监听【是否已进入可视区域的元素】,据此来触发事件
		var current;
		for(var i=0;i<asyncOffsets.length;i++){
			if(see+scroll>asyncOffsets[i]){
				current = $("div[idx=" + (i+1) +"]");
				
				// 已经加载过的不再加载
				if("true"==current.attr("isloaded")){
					continue;
				}
				
				// 控制台打印调试信息
				console.info(current.html());
				
				// 触发异步事件加载内容
				loading(i+1);
				
				
				// 一旦被加载过,就不再加载
				current.attr("isloaded","true");
				
			}
		}
			
	});
	
	// idx 为当前进入可视区域的对象,本例中就是一个div标签
	// 可以在初始化整个页面时就为每个div初始化一些参数,这样div在进入可视区域时可以用到这些参数
	function loading(idx){
		$.ajax({
			type:'POST',
			url:'http://localhost/ServletJs/LoadServlet',
			data:{"idx":idx},
			dataType: 'html',
			async:true,
			success:function(msg){
				$("div[idx=" + idx +"]").html(msg);
			}
		});
	}
	
	
</script>
</head>
<body>
	<div idx="1" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 1</div>
	<div idx="2" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 2</div>
	<div idx="3" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 3</div>
	<div idx="4" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 4</div>
	<div idx="5" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 5</div>
	<div idx="6" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 6</div>
	<div idx="7" async="async" style="height:400px;width:400px;border:1px solid #CCC;float:left;">area 7</div>
	<div idx="8" async="async" style="height:400px;width:400px;border:1px solid #CCC;float:left;margin-left:20px;">area 8</div>
	<div idx="9" async="async" style="height:400px;width:800px;border:1px solid #CCC;clear:both;">area 9</div>
	<div idx="10" async="async" style="height:400px;width:800px;border:1px solid #CCC;">area 10</div>
</body>
</html>


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
懒加载(Lazy Loading)是一种优化网页性能的技术,它可以在页面加载完毕后,延迟加载一些不是必要的资源,比如图片、视频等,从而减少页面的加载时间,提高用户的体验。 下面是用 JavaScript 实现懒加载的简单示例: 首先,我们需要在 HTML 中将需要延迟加载的资源(比如图片)的 `src` 属性替换为 `data-src` 属性,如下所示: ```html <img data-src="path/to/image.jpg"> ``` 接下来,我们需要编写 JavaScript 代码来实现懒加载。具体实现步骤如下: 1. 获取所有需要延迟加载的元素 2. 监听滚动事件,当元素出现在视口内时,动态加载资源 3. 将 `data-src` 属性的值赋给 `src` 属性 下面是完整的 JavaScript 代码: ```javascript window.addEventListener('DOMContentLoaded', function() { const lazyImages = document.querySelectorAll('img[data-src]'); const windowHeight = window.innerHeight; function lazyLoad() { lazyImages.forEach(image => { const imageTop = image.getBoundingClientRect().top; if (imageTop < windowHeight) { image.src = image.dataset.src; image.removeAttribute('data-src'); } }); } window.addEventListener('scroll', lazyLoad); window.addEventListener('resize', lazyLoad); }); ``` 在这段代码中,我们首先使用 `document.querySelectorAll` 获取所有带有 `data-src` 属性的图片元素。接着,我们获取浏览器窗口的高度,并定义 `lazyLoad` 函数,用于实现懒加载。在 `lazyLoad` 函数中,我们遍历所有需要延迟加载的图片元素,并使用 `getBoundingClientRect()` 方法获取元素的位置信息。如果元素的顶部位置小于浏览器窗口的高度,就将 `data-src` 属性的值赋给 `src` 属性,并移除 `data-src` 属性。 最后,我们监听 `scroll` 和 `resize` 事件,当页面滚动或窗口大小发生变化时,重新执行 `lazyLoad` 函数,以确保所有需要延迟加载的元素都能被正确加载。 注意:以上代码仅为示例,实际应用中需要根据具体情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值