做web开发的朋友都应该掌握前端优化这个技巧,其中一个就是滚动延时加载。这个技巧应用在了很多地方,比如新浪微博网页版。
为什么要延时加载呢?页面加载的时候就显示全部的图片不就得了?有必要多此一举吗?答案是肯定的。当要加载的图片或者内容很多时,如果一次性加载完毕,那么整个页面将会加载很久,意味着要用户等待很久,这是对用户不友好的。或许你还会问,那不就做个分页不就得了?其实这种滚动延时加载的技巧正是用来代替手动点击下一页的分页技术。每换一页都要用户点击一次,这也是对用户不友好的。所以才有了滚动延时加载。
我这里把加载图片作为例子,就好像百度图片里的一样,你往下滚动,它就会继续显示下一页的图片。
要求是这样的,比如我要加载20张图片,在页面加载完毕后我先加载5张(前提是5张已经占满浏览器窗口高度),当滚动条滚动到浏览器底部的时候再加载5张,一共加载4次。
原理是这样的,先获取当前浏览器的窗口高度a,然后给页面绑定一个滚动条滚动事件,当滚动条滚动的时候,首先判断时候已经加载了20张,如果小于20张,再获取当前文档距离顶部的高度b以及图片内容的高度c,如果a+b>=c,继续加载5张图片。
我说过,我喜欢以尽可能少的代码以及尽可能简单的demo来为有需要的人展示一些强大的功能,因为所有的东西原理其实都很简单,越简单的demo越容易让人理解和接受。所以代码很少,直接上代码:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>页面滚动延迟加载图片</title> <style type="text/css"> body { margin: 0px; } ul { list-style: none; margin: 0px; padding: 0px; } </style> <script type="text/javascript" src="jquery-1.7.2.min.js"></script> <script type="text/javascript"> var n = 0; var winHeight = $(window).height(); $(function () { loadimg(); $(window).scroll(function () { if (n < 20) { var docTop = $(document).scrollTop(); var contentHeight = $("#content").height(); if (docTop + winHeight >= contentHeight - 10) { loadimg(); } } }); }); function loadimg() { for (i = 0; i < 5; i++) { $("#content").append("<li><img src='1.jpg'/></li>"); } n += 5; } </script> </head> <body> <ul id="content"> </ul> </body> </html>