clipboard----封装复制组件
Clipboard.js
是一个轻量级的 JavaScript 库,旨在帮助开发者轻松地实现将文本复制到剪贴板的功能。它不依赖 Flash 或其他外部库,并且提供了一种简单的方式来响应用户的复制行为。Clipboard.js
支持绑定到任何元素(如按钮、图片等),并可以在用户点击时复制内容到剪贴板。(clipboard.js 中文网)
Clipboard.js 基本用法
-
安装 Clipboard.js
如果你使用的是 npm 或 yarn 来管理项目依赖,可以通过以下命令安装
Clipboard.js
:npm install clipboard --save # 或者 yarn add clipboard
-
引入 Clipboard.js
如果是使用
ES6
模块化方式,可以这样引入:import Clipboard from 'clipboard';
-
基本的使用方式
使用
Clipboard.js
实现复制功能的步骤非常简单,通常你需要以下几个部分:- 在 HTML 或 Vue 模板中绑定一个按钮或其他元素。
- 创建一个
Clipboard
实例并绑定到该元素上。 - 使用
Clipboard.js
提供的事件处理来响应用户行为(例如复制成功)。
Vue 中封装 Clipboard.js 复制组件
下面是如何封装一个复用的 Clipboard
复制功能组件,具体步骤如下:
1. 组件设计思路
- 创建一个可以通过
props
传递要复制的文本和可选的链接(url
)。 - 通过
Clipboard.js
实现复制功能。 - 提供用户交互提示,例如“复制成功”。
- 使用 Vue 的生命周期钩子确保资源正确地初始化和销毁。
2. 封装 Clipboard 复制组件
<template><div style="display: inline-block;"><div class="copy-container"><!-- 如果有 URL,显示链接 --><a v-if="url" class="copy-link" :href="url" target="_blank">{{ text }}</a><!-- 如果没有 URL,显示普通文本 --><div v-else class="copy-text">{{ text }}</div><!-- 复制按钮 (图片形式) --><img ref="copyButton" :data-clipboard-text="text" src="@/assets/copy.svg" alt="复制"class="copy-icon"/></div></div>
</template><script>
import Clipboard from 'clipboard';export default {name: 'CopyText',props: {text: {type: String,required: true, // 要复制的文本},url: {type: String,default: '', // 可选的链接地址}},data() {return {clipboard: null, // 存储 Clipboard 实例};},mounted() {// 创建 Clipboard 实例,绑定复制按钮this.clipboard = new Clipboard(this.$refs.copyButton);// 监听复制成功事件this.clipboard.on('success', () => {this.$message({message: '复制成功',type: 'success',});});// 监听复制失败事件this.clipboard.on('error', () => {this.$message({message: '复制失败',type: 'error',});});},destroyed() {// 销毁 Clipboard 实例,避免内存泄漏if (this.clipboard) {this.clipboard.destroy();}}
};
</script><style scoped>
.copy-container {position: relative;display: inline-block;
}.copy-link {color: #007bff;text-decoration: none;
}.copy-text {display: inline-block;padding-right: 30px; /* 留出空间给复制按钮 */
}.copy-icon {position: absolute;right: 0;top: 50%;height: 18px;cursor: pointer;transform: translateY(-50%);display: none; /* 默认隐藏 */
}.copy-container:hover .copy-icon {display: inline-block; /* 悬停时显示复制按钮 */
}
</style>
3. 代码分析
-
props
:text
:要复制的文本内容,是必传属性。url
:可选属性,表示是否提供一个链接。若提供,组件会显示一个链接而不是纯文本。
-
mounted
生命周期钩子:- 在组件挂载时,创建一个
Clipboard
实例,并绑定到img
元素上(即复制按钮)。使用ref="copyButton"
获取该元素。 - 绑定
success
和error
事件,复制成功或失败后会显示相应的提示消息。
- 在组件挂载时,创建一个
-
destroyed
生命周期钩子:- 在组件销毁时,销毁
Clipboard
实例,防止内存泄漏。
- 在组件销毁时,销毁
-
样式:
.copy-container
:为复制容器元素设置相对定位,确保复制按钮位置正确。.copy-icon
:默认隐藏复制按钮,只有在用户悬停时才显示。
4. 使用方式
在父组件中,使用这个封装好的 CopyText
组件:
<template><div><copy-text text="这是一段可以复制的文本" /><copy-text text="点击访问" url="https://example.com" /></div>
</template><script>
import CopyText from '@/components/CopyText.vue';export default {components: {CopyText,}
};
</script>
5. 常见的自定义功能
5.1. 自定义按钮样式
你可以自定义复制按钮的样式,比如使用按钮而非图片。只需要在模板中将 img
替换为 button
元素,并修改样式即可。
<button ref="copyButton" class="copy-btn">复制</button>
然后在 CSS 中调整按钮的样式。
5.2. 自定义提示消息
Clipboard.js
默认提供了成功或失败的事件回调,你可以在 success
或 error
回调中自定义提示消息。例如,你可以使用其他的 UI 库(如 Element UI
、Vuetify
等)来弹出更加复杂的提示。
this.$notify({title: '提示',message: '复制成功',type: 'success'
});
5.3. 动态更新复制内容
如果复制内容是动态更新的(例如通过用户输入),你可以通过 Vue 的响应式特性来自动更新复制按钮的 data-clipboard-text
。只需要确保 text
属性正确传递即可。
总结
通过封装 Clipboard.js
,你可以方便地在 Vue 项目中实现复制文本到剪贴板的功能,提供了良好的用户交互体验。以上是一个基本的实现,你可以根据需求进行扩展和自定义,例如修改按钮样式、更新提示信息等。
相关文章:
clipboard----封装复制组件
Clipboard.js 是一个轻量级的 JavaScript 库,旨在帮助开发者轻松地实现将文本复制到剪贴板的功能。它不依赖 Flash 或其他外部库,并且提供了一种简单的方式来响应用户的复制行为。Clipboard.js 支持绑定到任何元素(如按钮、图片等)…...
vue 中数据改变后,组件不更新
vue 中数据改变后,组件不更新 1.1. 确认响应式 1.2. 使用计算属性或侦听器 1.3. 检查异步更新队列 1.4. 手动触发更新 1.5. 检查数据绑定 1.6. 避免直接修改数组 1.7. 使用 Vue.set 或 this.$set 1.8. 检查作用域问题 1.9. 使用 Vue DevTools vue 中数据改变后&…...
使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...
C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
3 happy new year 7 year 1 new 4 new year year error input #include <stdio.h> #include <string.h> void strmcpy(char* s, char* t, int m); int main() {int repeat, m;char t[1000], s[1000];scanf("%d", &repeat);getchar(); //吸收换行符in…...
异步持久化策略对比
1.背景 游戏服务器其中一项重点工作,就是对游戏玩家的数据进行持久化,保证下次登录可以再续前缘。如果游戏服务器架构里没有缓存,每次操作都需要读写数据库,无疑对数据库带来非常大的压力。一旦使用缓存,就伴随异常持…...
手机租赁系统开发全流程解析与实用指南
内容概要 在如今快速发展的科技时代,手机租赁系统已经成为一种新兴的商业模式,非常符合当下市场需求。那么,在开发这样一个系统的时候,首先要从需求分析和市场调研开始。在这一阶段,你需要了解用户需要什么࿰…...
apache-dubbo
dubbo 文档地址 dubbo 官方文档地址 https://dubbo.apache.org/zh-cn/docs/user/references/api.html nacos 官方文档地址 https://nacos.io/zh-cn/docs/quick-start.html nacos下载地址 https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.…...
【JavaEE】网络(1)
🐵本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能…...
系统思考—决策
今年在为不同公司交付培训与项目时,常常听到“降本增效”的提法,但关键是:“降”的到底是什么成本?裁员无疑是最快的成本削减方式,但也可能带来人心惶惶。人力是资本,不是成本。除非企业到了生死存亡的关头…...
nVisual 前端集成SDK使用说明
目前客户需要搭建自己的可视化产品,但需要使用nVisual的可视化视图功能,根据目前项目实施需求,决定做了一款简单版的SDK视图插件,这个小插件的主要功能是嵌入到客户项目里给客户提供 ‘详细视图’‘拓扑视图’或者是‘主视图’的展示功能.目前已经开发完毕,这里做一下简单介绍.…...
上传文件时获取音视频文件时长和文本文件字数
获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求,要求上传文件时获取音视频文件时长和文本文件字数🐶。 发现这样的冷门资料不多,特做个记录。本文忽略文件上传功能,只封装核心的工具…...
[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners
本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...
【C++】string的主要功能模拟复现
经常调用的短小函数直接定义在头文件中,可以节省时间开销 #include<iostream> #include<assert.h> using namespace std; namespace mumu {class string{friend ostream& operator<<(ostream& _cout, const mumu::string& s);friend…...
Linux环境安装Jenkins
Linux环境安装Jenkins Jenkins和JDK的版本 Jenkins和JDK的版本需要对应,不然无法正常启动。 Jenkins稳定版下载地址 Jenkins服务 手动使用命令启动和关闭Jenkins比较麻烦,所以可以把Jenkins设置成开机启动。 创建Jenkins.sh文件 JAVA_HOME和jenk…...
Elasticsearch:ES|QL 中的全文搜索 - 8.17
细心的开发者如果已经阅读我前两天发布的文章 “Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等”,你就会发现在 8.17 的发布版中,有一个重要的功能发布。那就是 ES|QL 开始支持全文搜索了。在今天的文章中我们来尝试一下。…...
Leetcode 3387. Maximize Amount After Two Days of Conversions
Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接:3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...
Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理
一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中,系列指的是图表中的数据集合,它通常代表着一个数据源。每个系列都可以包含多个数据点,这些数据点在图表中以特定的形式展现,如柱状图中的柱子,折线图中…...
静态路由、RIP、OSPF、BGP的区别
静态路由:是管理员手动将路由写入到路由器中,配置简单开销小,但不能适应网络变化,只用于小型的网络 RIP,路由信息协议,属于距离矢量路由协议的一种,根据跳数来判断最优路由,如果跳数…...
解决 Flutter 在 Mac 上的编译错误
解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时,遇到了一系列的错误信息,这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中,Xcode 输出了大量的信息,其中…...
ECharts实现数据可视化入门详解
文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...
LRM-典型 Transformer 在视觉领域的应用,单个图像生成3D图像
https://yiconghong.me/LRM. 一、Abstract 第一个大型重建模型(LRM),它可以在5秒内从单个输入图像预测物体的3D模型。LRM采用了高度可扩展的基于transformer的架构,具有5亿个可学习参数,可以直接从输入图像中预测神经…...
Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)
Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”,即数据序列不能是杂乱…...
win10系统右下角没有显示网络图标 , 打开或关闭系统图标网络灰色
win10系统右下角没有显示网络图标 / 打开或关闭系统图标网络灰色 win10系统右下角没有显示网络图标, 并且打开或关闭系统图标网络灰色 解决方案: 首先,按【Ctrl Alt Del】组合键,然后点击【任务管理器】。任务管理器窗口,找到并选择【Wind…...
Python使用Selenium库获取 网页节点元素、名称、内容的方法
我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…...
onnx文件转pytorch pt模型文件
onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…...
计算机网络中的SIP协议是什么?
SIP(Session Initiation Protocol,会话初始化协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。以下是对SIP的详细简述: 一、SIP的基本概念 SIP是一个…...
Apache Kylin最简单的解析、了解
官网:Overview | Apache Kylin 一、Apache Kylin是什么? 由中国团队研发具有浓厚的中国韵味,使用神兽麒麟(kylin)为名 的一个OLAP多维数据分析引擎:(据官方给出的数据) 亚秒级响应ÿ…...
axfbinhexelf文件区别
0 Preface/Foreword axf,bin,hex,elf四个都能存在于嵌入式软件领域。 1 文件介绍 嵌入式软件中常见的文件包含: axf,包含调试信息,文件最大。调试信息放在机器码前面。elfhex,包含地址信息,文件内容较大。bin&#x…...
MySQL表自增id溢出的故障复盘,你是如何解决与监控的
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
03、SpirngMVC核心(下)
一、关于RESTful编程风格 什么是RESTful RESTful的英文全称是:Representational State Transfer(表述性状态转移) RESTful是Web服务接口的一种设计风格。它定了一组约束和规范,可以让Web服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTful对于请求的约束如下:…...
【游戏设计原理】10 - 科斯特的游戏理论
科斯特的游戏理论强调了游戏与学习之间的关系,认为“玩得开心”与“学习”是紧密相连的。换句话说,游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环,这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…...
【JAVA】Java项目实战—Java EE项目:客户关系管理(CRM)系统
Java EE项目:客户关系管理(CRM)系统 一、背景介绍 1.1 Java语言的重要性 Java是一种广泛使用的编程语言,因其跨平台性、面向对象特性以及丰富的生态系统而受到开发者的青睐。Java EE(Enterprise Edition)…...
JAVA 零拷贝技术和主流中间件零拷贝技术应用
目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云,测试运行代码看耗时为啥带buffer的IO比普通IO性能高?BufferedInputStream为啥性能高点…...
STM32软件IIC驱动TCA9548A多路测量AHT10
STM32软件IIC驱动TCA9548多路测量AHT10 TCA9548AAHT10代码逻辑代码展示现象总结 TCA9548A TCA9548A 有八个可通过 I2C 总线控制的双向转换开关,SCL/SDA 上行对扩展到八个下行对,或者通道,适用于系统中存在I2C目标地址冲突的情况。8路双向转换…...
博弈论3:图游戏SG函数(Graph Games)
目录 一、图游戏是什么 1.游戏特征 2.游戏实例 二、图游戏的必胜策略 1.SG 函数(Sprague-Grundy Function) 2.必胜策略(利用SG函数) 3.拿走游戏转化成图游戏(Take-away Game -> Graph Game) 一、图…...
音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...
SQL server学习05-查询数据表中的数据(上)
目录 一,基本格式 1,简单的SQL查询语句 2,关键字TOP 3,关键字DISTINCT 二,模糊查询 1,通配符 三,对结果集排序 1,不含关键字DISTINCT 2,含关键字DISTINCT 3&…...
Transformer记录Attention is all you need
视频: Transformer 原理详解_哔哩哔哩_bilibili 代码: harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper....
JAVA入门:使用IDE开发
JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加…...
汽车嵌入式软件构建高效技术团队的全面思考
在汽车嵌入式软件开发领域,构建一支高效的通用技术团队至关重要。这类团队负责为各种项目提供可复用、标准化的技术基石,从而提高开发效率、降低成本并确保产品质量。构建这样的团队需要从技术能力、角色分工、标准化与复用、流程管理与质量保证、工具和…...
Debezium源码分析: TopicSelector实现原理与应用
Debezium源码分析: TopicSelector实现原理与应用 Debezium源码分析: TopicSelector实现原理与应用文章目录背景介绍主要功能应用场景实现原理DataCollectionId 接口核心设计工作流程源码分析基础实现默认选择器创建应用示例1. 分库分表场景2. 多租户场景3. 业务领域分组总结设计…...
SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布
目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…...
【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法
目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…...
大模型系列4--开源大模型本地部署到微调(WIP)
背景 一直想真正了解大模型对硬件资源的需求,于是准备详细看一篇视频,将核心要点总结记录下。本文内容参考视频:保姆级教程:6小时掌握开源大模型本地部署到微调,感谢up主 训练成本 训练 > 微调 > 推理训练GPT…...
Linux 磁盘满了怎么办?快速排查和清理方法
当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...
go 协程练习例题
go 协程练习例题 例1:统计 1-200000 的数字中,哪些是素数例2:使用单通道、2个协程交替读取字符串例3:使用1个管道,2个协程写数据、1个协程读例4:完成一个并发任务调度器,按照指定顺序执行一系列…...
JAVA:访问者模式(Visitor Pattern)的技术指南
1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...
如何实现邮箱+验证码登录功能(express+vue+MySQL版)
目录 1. 初始化项目2. 配置环境变量3. 更新数据库4. 编写路由函数5. 前端调用接口 1. 初始化项目 前端根目录:/web 后端根目录:/api_server 安装依赖: npm install express mysql nodemailer randomstring dotenv其中,nodemaile…...
Pycharm访问MySQL数据库·上
1.MySQL驱动模块Connector #导入数据库的驱动工具 import mysql.connector #连接数据库必备的条件 config {"host": "localhost","port": 3306,"user": "root","password": "888888","database&…...
vscode+msys2+clang+xmake c++开发环境搭建
转载请标明出处:小帆的帆的专栏 安装msys2 下载msys2安装包:清华源下载地址安装msys2:安装目录,C:\Softwares\msys64 安装cling工具链,xmake !!!在开始菜单中启动MSYS2 CLANG64,…...