pDeng:pc端优化之 懒加载

229 阅读1分钟

前言:以前总是再看,今天第一次写文章,欢迎发现,提出不足

实现思路:以图片为例

思路:

  • 在图片中设置自定义属性data-img="图片地址",图片默认的地址统一选择一个提示图片之类的

  • 图片在页面中距离顶部的高度imgHeight

    与页面滚动出去的高度scrollTop

    屏幕的高度 screenHight

判断imgHeight 与(scrollTop+screenHight)

  • 当imgHeight 小于 (scrollTop+screenHight) 则把真实的图片地址赋给img 的src属性

html代码部分:

<div class="container1">
	<ul>
		<li>
			<a href="javascript:void(0)">
				<img data-img="img/img1.png" src="img/blank.jpg">
			</a>
		</li>
		<li>
			<a href="javascript:void(0)">
				<img data-img="img/img2.png" src="img/blank.jpg">
		    </a>
		</li>
	   <!-- 以下省略多个相同的li标签-->
	</ul>
</div>

js代码

$(function () {
	$.fn.extend({
		lazyLoad: function () {
			var imgs = $(this).find("img");
			
			var screenHight = $(window).height();
			
			$(window).on("scroll", function () {
			
				var scrollTop = $(window).scrollTop();
				
				imgs.each(function (index, item) {
					//如果loaded为true 则加载过
					if ($(item).attr("data-loaded")) {
						return;
					} else {
						var imgHeight = $(item).offset().top;
						//当滚动出去的距离+屏幕高度 >图片距离顶部的高度
						if (screenHight + scrollTop > imgHeight) {
							var src = $(item).attr("data-img");
							$(item).attr("src", src);
							//设置loaded标记
							$(item).attr('loaded', true);
						}
					}
				})
			}).trigger("scroll");
		}

	})
})

//中间做了点优化
//loaded标记  是标记图片是否已经加载过