v-lazy 和 viewer.js 组合使用时,预览图失效问题解决方案

news/2024/12/5 2:36:04/

解决方案

  1. 新增自定义属性 data-origin-url
<div class="img-wrp"><imgv-lazy="img.url":data-origin-url="img.url"/>
</div>
  1. viewer.js 修改 options.url 属性

其中 url 支持传入 string | function

const options = merge({url(image) {if (!image) return '';const url = image.getAttribute('large') || image.getAttribute('src');return url;}
}, configs.options || {});
gallery.current = new Viewer(dom, options);

综上,完美解决两者冲突的问题,亲测可用

问题分析

viewer.js 执行原理是在当前容器中,查找所有的 img 标签,并获取其 src 属性进行维护。

1. viewer.js

viewer.js 初始化时,获取 image.src 属性,如果为空,则对该dom不绑定任何事件

// viewer.js 源码
const images = [];forEach(isImg ? [element] : element.querySelectorAll('img'), (image) => {if (isFunction(options.filter)) {if (options.filter.call(this, image)) {images.push(image);}} else if (this.getImageURL(image)) {images.push(image);}
});// 获取 image src
getImageURL(image) {let { url } = this.options; // 默认 srcif (isString(url)) {url = image.getAttribute(url);} else if (isFunction(url)) {url = url.call(this, image);} else {url = '';}return url;
}

2. v-lazy

而 v-lazy 插件会在 img 标签上先挂载一个 data-src 自定义属性,等 img 加载完成之后,再进行替换

raw HTML
<div v-lazy-container="{ selector: 'img' }"><img data-src="//domain.com/img1.jpg"><img data-src="//domain.com/img2.jpg"><img data-src="//domain.com/img3.jpg">  
</div>loaded(data-src替换为src)
<div v-lazy-container="{ selector: 'img' }"><img src="//domain.com/img1.jpg"><img src="//domain.com/img2.jpg"><img src="//domain.com/img3.jpg">  
</div>

如果两个组件分开使用,功能都是正常运行的。一旦组合使用,这两者的逻辑就会有冲突(viewer.js 初始化时获取 img.src,v-lazy 只有在img loaded 时,才会挂载 src 属性)


http://www.ppmy.cn/news/1032089.html

相关文章

提高考试成绩的有效考试培训系统

近年来&#xff0c;随着考试竞争的日益激烈&#xff0c;对于学生来说&#xff0c;提高考试成绩已成为一项重要的任务。为了帮助学生有效提升考试成绩&#xff0c;我们开发了一套全面而详细的有效的考试培训系统。 该培训系统作为一种全新的教学方法&#xff0c;力求通过提供多…

redis 和 mongodb 比较

Redis和MongoDB是两种不同类型的数据库&#xff0c;它们在数据存储和查询方式、数据模型以及适用场景等方面有一些明显的区别。下面是Redis和MongoDB之间的一些比较&#xff1a; 数据模型&#xff1a; Redis&#xff1a;Redis是一个键值存储系统&#xff0c;支持多种数据结构如…

[HDLBits] Exams/m2014 q4c

Implement the following circuit: module top_module (input clk,input d, input r, // synchronous resetoutput q);always(posedge clk) beginif(r) q<1b0;elseq<d;end endmodule

API 接口设计版本管理控制的规范:向后兼容的3个规则

一下文章内容来自之前做API接口时整理的一些内容&#xff0c;记录分享一下。 在HTTP和HTML发展的早期&#xff0c;有着这样一条规则&#xff1a;任何浏览器在遇到无法识别的元素或元素属性时&#xff0c;都应该像该标签不存在一样行事。这使得快速更新HTML的功能成为可能&…

人流目标跟踪pyqt界面_v5_deepsort

直接上效果图 代码仓库和视频演示b站视频006期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; YOLOv5 DeepSORT介绍 YOLOv5 DeepSORT是一个结合了YOLOv5和DeepSORT算法的目标检测与多目标跟踪系统。让我为您详细解释一…

【boost网络库从青铜到王者】第二篇:asio网络编程中的socket的监听和连接

文章目录 1、网络编程基本流程2、终端节点endpoint的创建2.1、客户端终端节点endpoint的创建2.2、服务器终端节点endpoint的创建 3、服务器与客户端通信套接字socket的创建4、服务器监听套接字socket的创建5、绑定accpet监听套接字6、客户端连接指定的端点7、服务器接收连接8、…

【Spring】纯注解开发

1、简介 在Spring3.0升级了纯注解开发模式&#xff0c;使用Java类来代替配置文件&#xff0c;开启了Spring快速开发赛道。 2、定义bean Component Service Controller Repository 3、纯注解开发 使用Configuration声明一个配置类&#xff0c;使用ComponentScan来扫描作为bea…

基于协同过滤算法的体育商城商品推荐系统_t81xg

相比于传统的体育商品推荐方式&#xff0c;个性化智能的管理方式可以大幅提高体育商品推荐的管理效率&#xff0c;实现了个性化智能体育商品推荐的标准化、制度化、程序化的管理&#xff0c;有效地防止了体育商品推荐的随意管理&#xff0c;提高了信息的处理速度和精确度&#…