实践

虚拟代理实现图片预加载

提前准备
  • 本地准备一张loading图片作为预加载使用
  • 找一个张网图作为要展示的目标图片
  • 在控制台把网速调慢一些

效果
  • 在目标图片没有加载出来之前会显示loading图片
  • 图片加载完成后切换到目标图片

主要代码
  1. //目标图片地址
  2. const targetImageSrc = 'https://w.wallhaven.cc/full/l3/wallhaven-l3zmwy.jpg';
  3. //本地loading
  4. const loadingSrc = './loading.gif';
  5. //要加载的图片
  6. function loadImage() {
  7. //选择图片加载区域
  8. const imgSection = document.querySelector('section');
  9. const createImage = new Image();
  10. imgSection.appendChild(createImage);
  11. return {
  12. get setImageSrc() {
  13. return 'CANSET';
  14. },
  15. set setImageSrc(val) {
  16. createImage.src = val;
  17. },
  18. // setImageSrc(src) {
  19. // createImage.src = val;
  20. // },
  21. };
  22. }
  23. //代理图片的工具
  24. //target 加载源需要有setImageSrc方法
  25. //目标图片src
  26. function proxyImager(target, src) {
  27. //创建负责加载资源的图片
  28. const handImage = new Image();
  29. //监听负责加载资源的图片的load,设置在图片完成时把资源给target
  30. handImage.onload = function () {
  31. //TODO处理target边界
  32. //1.可以直接通过属性设置,2.可通过函数调用传递src
  33. target.setImageSrc = src;
  34. };
  35. //开启加载资源
  36. handImage.src = src;
  37. //开启本地loading
  38. target.setImageSrc = loadingSrc;
  39. }
  40. //启动代理
  41. proxyImager(loadImage(), targetImageSrc);