js---《实现图片的懒加载》

什么是图片懒加载:

定义

当打开一个有很多图片的页面时,先只加载页面上看到的图片,等滚动到页面下面时,再加载所需的图片。这就是图片懒加载。

作用:

减少或延迟请求数,缓解浏览器的压力,增强用户体验

如何实现:

1.设置图片src属性为同一张图片,同时自定义一个data-src属性来存储图片的真实地址
2.页面初始化显示的时候或者浏览器发生滚动的时候判断图片是否在视野中
3.当图片在视野中时,通过js自动改变该区域的图片的src属性为真实地址

看代码:

html部分:

<div class='container'>
	<img src=''>//‘’其中写相同的图片
	。
	。
	。
	。
	。
	。
	。
	。
	。
	。
	<img src=''>//‘’其中写相同的图片
	
</div>
<style>
.container{
	max-width:800px;
	margin:0 auto;
}
.container:after{
	content:'';
	display:block;
	clear:both;
}
.container img{
	float:left;
	width:50%;
}
h1{
	clear:both
}
/*ps:img都是浮动,如果不清楚浮动,h1的值高度就相当于container里面最高的,不是实际的数值*/
</style>

js代码:

<script>
	start()//一开始没有滚动,也需要触发一次
	$(window).on('scroll',function(){//滚动时,显示对应图片
		start()
	})
	function start(){
		//not('[data-isLoaded]')选中已加载的图片不需要重新加载
		$('.container img').not('[data-isLoaded]').each(function(){
			var $node=$(this)
			if(isShow($node)){
				loadImg($node)
			}
		})
	}
	
	function isShow($node){//判断图片是否在视野中
		return $node.offset().top<=$(window).height()+$(window).scrollTop()
	}
	//$node.offset().top元素相对于顶点的距离,
	//$(window).scrollTop()滚动的距离
	//$(window).height()窗口高度
	
	function loadImg($img){
	//.attr()
	//.attr(属性名称,值)
		$img.attr('src',$img.attr('data-src'))//把data-src的值 赋值给src
		$img.attr('data-isLoaded',1)//区别图片是否被加载过,防止重新加载
	}

</script>

// $ node.offset().top元素相对于顶点的距离,
//$(window).scrollTop()滚动的距离
// $ (window).height()窗口高度
//.attr(值)
//.attr(属性名称,值)
//not(‘[data-isLoaded]’)选中已加载的图片不需要重新加载

若有疑问,及时提问哦

小作者在持续更新中…

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用 Intersection Observer API 实现图片。这个 API 可以监听一个元素是否进入了视口(viewport),进入了就会触发一个回调函数,我们就可以在这个回调函数中图片。 具体步骤如下: 1. 将页面中所有需要图片的 `src` 属性替换成一个 `data-src` 属性,表示真实的图片路径。 2. 使用 Intersection Observer API 监听所有需要图片元素。 3. 当某个图片元素进入视口时,将其 `data-src` 属性的值赋给 `src` 属性,从而真实的图片。 代码示例: ```html <img data-src="path/to/image.jpg" class="lazyload" /> <script> const lazyloadImages = document.querySelectorAll('.lazyload'); const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; observer.unobserve(img); } }); }); lazyloadImages.forEach(img => { observer.observe(img); }); </script> ``` 在上面的代码中,我们首先获取到页面中所有需要图片元素,并使用 Intersection Observer API 监听它们。当某个图片元素进入视口时,我们将其 `data-src` 属性的值赋给 `src` 属性,并调用 `unobserve` 方法停止监听该元素。这样就可以实现图片了。 ### 回答2: 图片是一种优化网页性能的技术,可以通过延迟页面上的图片快页面速度。即在页面初始化时,不会一次性所有图片,而是当图片进入可视区域时才进行,从而提高页面速度。 如果不使用lazy-loader,可以通过监听页面滚动事件实现图片。具体步骤如下: 1. 在页面中将需要图片的src属性设置为一个占位符,例如data-src。 2. 监听页面滚动事件,在滚动事件的回调函数中,判断需要图片是否进入了可视区域。 3. 判断图片是否进入可视区域的方法是比较图片在页面中的位置和可视区域的位置,可以通过使用getBoundingClientRect()方法获取图片的位置信息,再与可视区域的信息进行比较。 4. 当图片进入可视区域时,将data-src属性的值赋给src属性,即实现图片的实际。 需要注意的是,为了避免滚动事件频繁触发,可以使用节流或防抖技术进行优化,以提高滚动事件的响应速度。 总结起来,不使用lazy-loader可以通过监听页面滚动事件,判断图片是否进入可视区域,从而实现图片。这样可以减少页面时间,提高用户体验。 ### 回答3: 图片是一种优化网页速度的技术,它通过延迟图片,减少页面的初始时间,提升用户体验。如果不使用lazy-loader,我们可以通过以下步骤来实现图片。 首先,将所有需要图片的src属性保存在一个自定义属性中,例如"data-src"。 其次,通过监听页面的滚动事件,判断图片是否进入可视区域。当图片进入可视区域时,获取其自定义属性值,将其赋给src属性,从而触发图片。 具体实现步骤如下: 1. 在HTML中设置需要图片的img标签,将图片的src属性设置为占位图或空白。 ```html <img class="lazy-img" data-src="path_to_image.jpg" src="placeholder_image.jpg"> ``` 2. 使用JavaScript获取页面中所有class为"lazy-img"的img元素,并将其存储为一个数组。 ```javascript var lazyImages = document.querySelectorAll('.lazy-img'); ``` 3. 监听页面的滚动事件,判断图片是否进入可视区域。 ```javascript window.addEventListener('scroll', function() { for (var i = 0; i < lazyImages.length; i++) { if (isElementInViewport(lazyImages[i])) { lazyImages[i].src = lazyImages[i].getAttribute('data-src'); } } }); ``` 4. 编写一个函数isElementInViewport来判断图片是否进入可视区域。 ```javascript function isElementInViewport(element) { var rect = element.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth) ); } ``` 通过以上步骤,我们可以实现图片效果,当图片进入可视区域时,才真实的图片资源,从而减少网页的初始时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠媂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值