lazyload.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. function isInSight(el) {
  2. var bound = el.getBoundingClientRect();
  3. var clientHeight = window.innerHeight;
  4. //只考虑向下滚动加载
  5. //const clientWidth=window.innerWeight;
  6. return bound.top <= clientHeight + 100;
  7. }
  8. var index = 0;
  9. function checkImgs() {
  10. var imgs = document.querySelectorAll('.my-photo');
  11. for (var i = index; i < imgs.length; i++) {
  12. if (isInSight(imgs[i])) {
  13. loadImg(imgs[i]);
  14. index = i;
  15. }
  16. }
  17. }
  18. function loadImg(el) {
  19. var loaded = el.getAttribute("loaded");
  20. if (!Boolean(loaded)) {
  21. var source = el.getAttribute("data-src");
  22. el.setAttribute("loaded", true);
  23. el.src = source;
  24. }
  25. }
  26. // var mustRun = 500
  27. // function throttle(fn, mustRun) {
  28. // var timer = null;
  29. // var previous = null;
  30. // return function() {
  31. // var now = new Date();
  32. // var context = this;
  33. // var args = arguments;
  34. // if (!previous) {
  35. // previous = now;
  36. // }
  37. // var remaining = now - previous;
  38. // if (mustRun && remaining >= mustRun) {
  39. // fn.apply(context, args);
  40. // previous = now;
  41. // }
  42. // }
  43. // }
  44. function throttle(fn) {
  45. var timer = null;
  46. var previous = null;
  47. return function () {
  48. var now = new Date();
  49. var context = this;
  50. var args = arguments;
  51. if (!previous) {
  52. previous = now;
  53. }
  54. var remaining = now - previous;
  55. setTimeout(refresh(fn, remaining, context, args, previous, now));
  56. }
  57. }
  58. function refresh(fn, remaining, context, args, previous, now) {
  59. if (remaining >= 500) {
  60. fn.apply(context, args);
  61. previous = now;
  62. }
  63. }