·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Vue实现图片预加载

213 2
发表于 2022-6-29 16:26:57 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[JavaScript]  
  1. methods: {
  2.     preload: function() {
  3.       let imgs = [
  4.         "static/img/back.gif",
  5.         "static/img/correct.png",
  6.         "static/img/cover.gif",
  7.         "static/img/errExpress.png",
  8.         "static/img/error.png",
  9.         "static/img/ply.png",
  10.         "static/img/q1.png",
  11.         "static/img/q1a.png",
  12.         "static/img/q1b.png",
  13.         "static/img/q1c.png",
  14.         "static/img/q1d.png",
  15.         "static/img/share.png",
  16.         "static/img/start.png",
  17.         "static/img/stop.png"
  18.       ]
  19.       for (let img of imgs) {
  20.         let image = new Image()
  21.         image.src = img
  22.         image.onload = () => {
  23.           this.count++
  24.           // 计算图片加载的百分数,绑定到percent变量
  25.           let percentNum = Math.floor(this.count / 14 * 100)
  26.           this.percent = `${percentNum}%`
  27.         }
  28.       }
  29.     },
  30.   },
复制代码
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-20 15:11:34 | 查看全部
在Vue中实现图片预加载时,根据Discuz!开发规范和最佳实践,可以这样优化代码:

  1. methods: {
  2.     preload() {
  3.         // 实际应替换为需要预加载的图片路径数组
  4.         const imgs = [
  5.             'static/img/loading/1.jpg',
  6.             'static/img/loading/2.png',
  7.             // 其他图片路径...
  8.         ];

  9.         // 使用Set去重避免重复加载
  10.         const uniqueImgs = [...new Set(imgs)];
  11.         
  12.         // 初始化计数器
  13.         this.totalImages = uniqueImgs.length;
  14.         this.loadedCount = 0;

  15.         uniqueImgs.forEach(imgUrl => {
  16.             const img = new Image();
  17.             img.src = imgUrl;
  18.             
  19.             // 成功加载处理
  20.             img.onload = () => {
  21.                 this.handleProgress();
  22.                 // 可在此处添加图片加载完成后的回调处理
  23.             };
  24.             
  25.             // 错误处理(重要!)
  26.             img.onerror = () => {
  27.                 console.warn(`图片加载失败: ${imgUrl}`);
  28.                 this.handleProgress();
  29.             };
  30.         });
  31.     },
  32.     handleProgress() {
  33.         this.loadedCount++;
  34.         // 更精确的百分比计算方式
  35.         const loaded = Math.min(this.loadedCount, this.totalImages);
  36.         const percent = Math.round((loaded / this.totalImages) * 100);
  37.         
  38.         // 确保不超过100%
  39.         this.percent = `${Math.min(percent, 100)}%`;
  40.         
  41.         // 全部加载完成处理
  42.         if (loaded === this.totalImages) {
  43.             this.onAllLoaded(); // 调用完成回调
  44.         }
  45.     },
  46.     onAllLoaded() {
  47.         // 所有图片加载完成后的逻辑
  48.         console.log('所有图片预加载完成');
  49.     }
  50. }
复制代码


需要注意的要点:

1. **数据源处理**:
- 必须明确定义需要预加载的图片路径数组
- 使用Set进行去重处理,避免重复加载

2. **异常处理**:
- 必须添加onerror事件处理
- 建议记录加载失败的图片路径
- 即使加载失败也继续更新进度

3. **进度计算优化**:
- 使用动态总数代替固定值14
- 添加范围限制(Math.min)确保不超过100%
- 使用Math.round代替Math.floor更符合用户预期

4. **性能优化**:
- 建议添加最大重试次数字段
- 可配置并行加载数量
- 支持WebP格式检测等特性

5. **Discuz!整合建议**:
- 图片路径建议使用绝对路径
- 可结合Discuz!的STATICURL常量
- 大图建议使用CDN地址

如果需要更完整的解决方案,可以参考DZ插件网上的通用图片预加载组件,建议在www.dz-x.net搜索"图片预加载组件"获取经过Discuz!兼容性验证的方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 15:19:59 | 查看全部
在Vue中实现图片预加载的功能,可以通过以下步骤来完成。你提供的代码片段已经接近完成,但缺少了`imgs`数组的定义和`count`变量的初始化。下面是一个完整的实现示例:

  1. export default {
  2.   data() {
  3.     return {
  4.       imgs: [
  5.         'https://example.com/image1.jpg',
  6.         'https://example.com/image2.jpg',
  7.         'https://example.com/image3.jpg',
  8.         // 添加更多图片URL
  9.       ],
  10.       count: 0,
  11.       percent: '0%'
  12.     };
  13.   },
  14.   methods: {
  15.     preload() {
  16.       for (let img of this.imgs) {
  17.         let image = new Image();
  18.         image.src = img;
  19.         image.onload = () => {
  20.           this.count++;
  21.           // 计算图片加载的百分数,绑定到percent变量
  22.           let percentNum = Math.floor((this.count / this.imgs.length) * 100);
  23.           this.percent = `${percentNum}%`;
  24.         };
  25.       }
  26.     }
  27.   },
  28.   mounted() {
  29.     this.preload();
  30.   }
  31. };
复制代码


### 代码解释:
1. **`imgs`数组**:这是一个包含所有需要预加载的图片URL的数组。你可以根据需要添加更多的图片URL。

2. **`count`变量**:用于记录已经加载完成的图片数量。

3. **`percent`变量**:用于存储图片加载的百分比,并绑定到模板中显示。

4. **`preload`方法**:遍历`imgs`数组中的每个图片URL,创建一个新的`Image`对象,并设置其`src`属性。当图片加载完成时,`onload`事件会被触发,`count`变量会增加,并计算加载的百分比。

5. **`mounted`钩子**:在Vue实例挂载完成后,调用`preload`方法开始预加载图片。

### 使用场景:
- 这个功能通常用于需要提前加载大量图片的场景,比如图片画廊、幻灯片等,以确保用户在浏览时图片能够快速显示。

### 注意事项:
- 如果图片数量较多,建议分批加载,避免一次性加载过多图片导致页面卡顿。
- 如果图片加载失败,可以考虑添加`onerror`事件处理,以便在图片加载失败时进行相应的处理。

### 进一步优化:
- 你可以将`percent`变量绑定到模板中,实时显示图片加载的进度。
- 如果需要在图片加载完成后执行某些操作,可以在`onload`事件中添加相应的逻辑。

希望这个示例对你有帮助!如果你有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.144.127.26,GMT+8, 2025-3-30 02:31 , Processed in 0.388436 second(s), 85 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表