用 jquery 制作随着显示页面的滚动条的滚动动态加载图片,适用于图片太多的页面,在访问网页时,可以先只加载第一屏要显示的图片,当用户进行向下滚动查看页面的时候,动态去加载这些图片,好处是减少页面第一次显示的流量,加快页面第一屏显示的速度。
主要原理:通过 setInterval 定时事件,检测滚动条的位置,再进行 ajax 请求服务端数据,加载图片到页面上。
现有 淘宝商城,3366等网站都有应用。
主要演示代码如下:
1. <script type= "text/javascript"
2. var iHeight = 0
3. var iTop = 0
4. var clientHeight = 0
5. var iIntervalId = null
6. var itemsSize = 0
7. var pageNo = 1 ; // 当前页数,默认设为第 1 页
8. var pageSize = 4 ; // 每页显示的数量
9.
10. getPageHeight();
11.
12. // 添加定时检测事件,每2秒检测一次
13. iIntervalId = setInterval("_onScroll();" , 2000
14.
15. // 取得当前页面显示所占用的高度
16. function getPageHeight() {
17. if
18. clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
19. else
20. clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
21. }
22.
23. iHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
24. }
25.
26. // 调用ajax取服务端数据
27. function show() {
28. pageNo++;
29.
30. $.ajax({
31. 'img.php?p=' +pageNo+ '&r='
32. 'GET'
33. 'text'
34. 4000
35. beforeSend: showLoadingImg,
36. error: showFailure,
37. success: showResponse
38. });
39. }
40.
41. function showLoadingImg() {
42. '#showmore' ).html( '<a class="handle" href="javascript:show()"><img src="images_test/loading.gif" height="32px" />显示更多结果</a>'
43. }
44.
45. function showFailure() {
46. '#showmore' ).html( '<font color=red> 获取查询数据出错 </font>'
47. }
48.
49. // 根据ajax取出来的json数据转换成html
50. function showResponse(responseData) {
51. "(" +responseData+ ")"
52. itemsSize = returnjson.items.length;
53.
54. ''
55. 1 )*pageSize + 1
56. for (i= 0
57. '<ul class="item">'
58. '<li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" title="' + returnjson.items[i].name + '"><img src="' + returnjson.items[i].pic + '" alt="' + returnjson.items[i].name + '" /></a></li>'
59. '<li class="i_title"><span class="order">' + (pageOffset + i) + '</span><a href="http://www.xuekaifa.com" target="_blank" title="' + returnjson.items[i].name + '">' + returnjson.items[i].name + '</a></li>'
60.
61. '</ul>'
62. }
63. '<div class="clear"></div>'
64. '#items' ).html($( '#items'
65.
66. // 当前页码数小于3页时继续显示更多提示框
67. if (pageNo < 3
68. '#showmore' ).html( '<a class="handle" href="javascript:show()">显示更多结果</a>'
69. else
70. clearInterval(iIntervalId);
71. '#showmore'
72. }
73. }
74.
75. // 判断滚动条是否到达底部
76. function reachBottom() {
77. 0
78. if
79. scrollTop = document.documentElement.scrollTop;
80. else if
81. scrollTop = document.body.scrollTop;
82. }
83. if ((scrollTop > 0
84. return true
85. else
86. return false
87. }
88. }
89.
90. // 检测事件,检测滚动条是否接近或到达页面的底部区域,0.99是为了更接近底部时
91. function _onScroll() {
92. iTop = document.documentElement.scrollTop + document.body.scrollTop;
93. getPageHeight();
94. if (((iTop+clientHeight)>parseInt(iHeight* 0.99
95. if (pageNo >= 3
96. clearInterval(iIntervalId);
97. '#showmore'
98. return
99. }
100. show();
101. }
102. };
103. </script>