一、为什么写这篇博客?
return)。
二、页面滚动加载图片的理解:
我们知道当一个网页含有大量图片的时候,往往加载时间都会很慢,这里不考虑服务器多好,网速多块哈。如淘宝京东等大型电商网站。新闻类就是新浪等了。你可以想象一下,如果一下加载整个网页的所有图片,那会是一个缓慢的过程。在现今我们对知识的渴望性的的增加额,总想最快的浏览网页。所以这个时候我们就需要用到滚动时时加载的方法了!
三、实现思路:
×)图标。(这里你应该知道说的谁了哈)这样肯定是不行的。
(1)所以必须是一个对的url地址。我们就用一张一像素的图片作为初始图片。
(2)在滚动到图片出现在浏览器的可视范围时,在动态替换图片的url地址,这里的动态指的是使用js替换!
如下:
<img data-url="img/4.png" src="img/pix.png" />
<img data-url="img/4.png" src="img/pix.png" />
$('img ').data('url'); //使用 data()方法获得里面的数据
解决了这两个问题,那么就简单了,接下来就看怎么实现吧。
四、需要你知道的?
1、怎样获得浏览器的可视高度?
var windHight = $(window).height(); //获得浏览器的可视高度
2、怎样获得滚动条相对于顶部的高度?
var scrollHight = $(window).scrollTop();//获得滚动条相对于顶部的高度
3、怎样获得每张图片相对于浏览器顶部的高度?
var imgHight = $('img').offset().top; //获得每张图片相对于顶部的高度
imgHight - windHight < scrollHight ? '成立的话就代表出现了' : '不成立就代表没出现';
5、怎样排除首屏的图片?
imgHight - windHight > 0 //排除首屏的图片
6、排除已经加载过的图片
$(this).attr('src') != $(this).data('url') //排除已经加载过的图片
好了这样基本实现了!
五、效果分析:
看出结果了吧!实现了滚动加载的效果而且不会出现重复加载的情况!下面看浏览器的请求:
看到这里也就基本完结了!最后贴出自己的代码这个代码看起我觉得很好理解,但是可能在性能上会有不足,还请你来提出意见!先谢谢了。
温柔点击这里:在线演示滚动加载图片
看代码:
$(function(){
var $wd = $(window),
$img = $('img'),
imgTop, //图片距离顶部高度
scTop, //滚动条高度
wH; //窗口高度
wH = $wd.height(); //获得可视浏览器的高度
$wd.scroll( function() {
scTop = $wd.scrollTop(); //获取滚动条到顶部的垂直高度
$img.each(function(){
imgTop = $(this).offset().top;
if(imgTop - wH < scTop && //图片必须出现在窗口底部上面
imgTop - wH > 0 && //排除首页图片
$(this).attr('src') != $(this).data('url')){ //排除已经加载过的图片
$(this).attr({
src: $(this).data('url')
});
}
});
});
});
思考:
两种解决方法:
一、所有的图片初始都使用一像素的图片,用 load 事件遍历图片再显示。(缺点效率低)
二、按照最大的显示视频计算初始高度,及最开始在首页中多写入几张进去。(相对好点)
(本篇完)