js实现一个长页面中的图片懒加载即滚动到其位置才加载



  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document </title>
  6. <style>
  7. img {
  8. display: block;
  9. margin-bottom: 50px;
  10. width: 400px;
  11. height: 400px;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  17. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  18. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  19. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  20. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  21. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  22. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  23. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  24. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  25. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  26. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  27. </body>
  28. <script>
  29. var num = document.getElementsByTagName( 'img').length;
  30. var img = document.getElementsByTagName( "img");
  31. var n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历
  32. lazyload(); //页面载入完毕加载可是区域内的图片
  33. //window.onscroll = lazyload;
  34. function lazyload() { //监听页面滚动事件
  35. var seeHeight = document.documentElement.clientHeight; //可见区域高度
  36. var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滚动条距离顶部高度
  37. for ( var i = n; i < num; i++) {
  38. if (img[i].offsetTop < seeHeight + scrollTop) {
  39. if (img[i].getAttribute( "src") == "") {
  40. img[i].src = img[i].getAttribute( "data-src");
  41. }
  42. n = i + 1;
  43. }
  44. }
  45. }
  46. // 简单的节流函数
  47. //fun 要执行的函数
  48. //delay 延迟
  49. //time 在time时间内必须执行一次
  50. function throttle(fun, delay, time) {
  51. var timeout,
  52. startTime = new Date();
  53. return function() {
  54. var context = this,
  55. args = arguments,
  56. curTime = new Date();
  57. clearTimeout(timeout);
  58. // 如果达到了规定的触发时间间隔,触发 handler
  59. if (curTime - startTime >= time) {
  60. fun.apply(context, args);
  61. startTime = curTime;
  62. // 没达到触发间隔,重新设定定时器
  63. } else {
  64. timeout = setTimeout( function(){
  65. fun.apply(context, args);
  66. }, delay);
  67. }
  68. };
  69. };
  70. // 实际想绑定在 scroll 事件上的 handler
  71. //function lazyload(event) {}
  72. // 采用了节流函数
  73. window.addEventListener( 'scroll',throttle(lazyload, 500, 1000));
  74. </script>
  75. </html>

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document </title>
  6. <style>
  7. img {
  8. display: block;
  9. margin-bottom: 50px;
  10. width: 400px;
  11. height: 400px;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  17. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  18. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  19. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  20. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  21. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  22. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  23. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  24. <img src="" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
  25. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  26. <img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
  27. </body>
  28. <script>
  29. var num = document.getElementsByTagName( 'img').length;
  30. var img = document.getElementsByTagName( "img");
  31. var n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历
  32. lazyload(); //页面载入完毕加载可是区域内的图片
  33. //window.onscroll = lazyload;
  34. function lazyload() { //监听页面滚动事件
  35. var seeHeight = document.documentElement.clientHeight; //可见区域高度
  36. var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滚动条距离顶部高度
  37. for ( var i = n; i < num; i++) {
  38. if (img[i].offsetTop < seeHeight + scrollTop) {
  39. if (img[i].getAttribute( "src") == "") {
  40. img[i].src = img[i].getAttribute( "data-src");
  41. }
  42. n = i + 1;
  43. }
  44. }
  45. }
  46. // 简单的节流函数
  47. //fun 要执行的函数
  48. //delay 延迟
  49. //time 在time时间内必须执行一次
  50. function throttle(fun, delay, time) {
  51. var timeout,
  52. startTime = new Date();
  53. return function() {
  54. var context = this,
  55. args = arguments,
  56. curTime = new Date();
  57. clearTimeout(timeout);
  58. // 如果达到了规定的触发时间间隔,触发 handler
  59. if (curTime - startTime >= time) {
  60. fun.apply(context, args);
  61. startTime = curTime;
  62. // 没达到触发间隔,重新设定定时器
  63. } else {
  64. timeout = setTimeout( function(){
  65. fun.apply(context, args);
  66. }, delay);
  67. }
  68. };
  69. };
  70. // 实际想绑定在 scroll 事件上的 handler
  71. //function lazyload(event) {}
  72. // 采用了节流函数
  73. window.addEventListener( 'scroll',throttle(lazyload, 500, 1000));
  74. </script>
  75. </html>

猜你喜欢

转载自blog.csdn.net/my_csdn2018/article/details/80898154