imgLoading.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //页面加载时调用一次,使图片显示
  2. window.onload = function() {
  3. var img = document.querySelectorAll("img[data-src]")
  4. for(var i = 0; i < img.length; i++) {
  5. img[i].style.opacity = "0"
  6. }
  7. Limg()
  8. }
  9. //监听滚动条事件
  10. window.onscroll = function(){
  11. var limg = document.querySelectorAll("img[data-src]")
  12. if(limg.length !== 0){
  13. Limg()
  14. this.console.log("加载...")
  15. }
  16. }
  17. function Limg() {
  18. var viewHeight = document.documentElement.clientHeight // 可视区域的高度
  19. var t = document.documentElement.scrollTop || document.body.scrollTop;
  20. // Array.prototype.forEach.call()是一种快速的方法访问forEach,并将空数组的this换成想要遍历的list
  21. var limg = document.querySelectorAll("img[data-src]")
  22. Array.prototype.forEach.call(limg, function(item, index) {
  23. var rect
  24. if(item.getAttribute("data-src") === "")
  25. return
  26. //getBoundingClientRect用于获取某个元素相对于视窗的位置集合。集合中有top, right, bottom, left等属性。
  27. rect = item.getBoundingClientRect()
  28. // 图片一进入可视区,动态加载
  29. if(rect.bottom >= 0 && rect.top < viewHeight) {
  30. (function() {
  31. var img = new Image()
  32. img.src = item.getAttribute("data-src")
  33. item.src = img.src
  34. //给图片添加过渡效果,让图片显示
  35. var j = 0
  36. setInterval(function() {
  37. j += 0.2
  38. if(j <= 1) {
  39. item.style.opacity = j
  40. return
  41. }
  42. }, 100)
  43. item.removeAttribute('data-src')
  44. })()
  45. }
  46. })
  47. }