JS问题:如何实现文本一键复制和长按复制功能?
前端功能问题系列文章,点击上方合集↑
序言
大家好,我是大澈!
本文约2000+字,整篇阅读大约需要4分钟。
本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。
如果您只需要解决问题,请阅读第一、二部分即可。
如果您有更多时间,进一步学习问题相关知识点,请阅读至第三部分。
1. 需求分析
点击复制按钮,将某一区域文本复制到粘贴板,并可以在任何地方粘贴使用。
长按某一区域文本1秒钟,将文本复制到粘贴板,并可以在任何地方粘贴使用。

2. 实现步骤
2.1 项目中的应用场景说明
在学习如何使用之前,我们更重要的是要搞清楚,一般什么场景会用到文本复制功能。
文本一键复制和长按复制功能,我一直作为一种简单的优化手段使用,且在项目中使用的频率还算挺高的。
它可以提供更好的用户体验,减少用户的操作步骤,并简化复制文本内容的过程。这样不仅仅是节省了用户的时间和精力,更重要的是能提高应用操作的易用性、准确性。
以下是一些常见的应用场景:
-
分享链接或代码:当用户需要分享特定链接或代码片段时,提供一键复制按钮可以方便用户将内容复制到剪贴板,以便他们可以粘贴到其他应用或发送给其他人。
-
复制文本消息:在某些应用中,用户可能需要复制接收到的文本消息,如聊天应用或社交媒体应用。通过长按文本并触发复制操作,用户可以快速复制消息内容进行回复、引用或转发。
-
复制分享内容:在某些应用中,用户可能需要复制分享的内容,如文章、新闻、产品描述等。提供一键复制按钮或长按复制功能可以让用户轻松复制所需内容,以便在其他平台上分享或保存。 -
复制重要信息:当用户需要复制重要信息,如订单号、交易号、验证码等,一键复制或长按复制功能可以减少用户手动输入的错误,并提高复制操作的方便性和准确性。
搞清楚这些,然后下面,就是如何使用的问题了。
2.2 代码实例
模板代码:
<template><div><!-- 一键复制按钮 --><button @click="copyText">一键复制</button><!-- 需要复制的文本区域 --><div@mousedown="startLongPress"@mouseup="cancelLongPress"@mouseleave="cancelLongPress"><h1>长按复制</h1>{{ text }}</div></div>
</template>
逻辑代码:
<script setup>
let text = "要复制的文本";
let longPressTimer = null;// 复制方法
const copyText = () => {// 关键navigator.clipboard.writeText(text).then(() => {window.alert("复制成功");}).catch((error) => {window.alert("复制失败", error);});
};// 开始长按
const startLongPress = () => {longPressTimer = setTimeout(() => {copyText();}, 1000); // 设置长按时间阈值,单位为毫秒
};// 取消长按
const cancelLongPress = () => {clearTimeout(longPressTimer);
};
</script>
2.3 实现说明
我们通过 navigator.clipboard.writeText 方法将文本复制到剪贴板。
在一键复制功能中,直接在按钮的点击事件中,调用 copyText 方法即可。
在长按复制功能中,通过 mousedown 事件触发 startLongPress 方法启动一个定时器,若长按一定时间后松开鼠标,则调用 copyText 方法执行复制操作;同时,通过 mouseup 和 mouseleave 事件触发 cancelLongPress 方法,清除定时器,避免误触发复制操作。
大澈考虑到navigator对象大家可能用的比较少,所以对navigator对象简单做了一下总结,有时间的朋友可见第三部分学习。
3. 问题详解
3.1 关于navigator对象的总结
navigator 是一个内置的 JavaScript 对象,它表示浏览器的状态和标识信息。
通过 navigator 对象,可以获取有关浏览器的各种信息,包括用户代理字符串、支持的特性和功能等。
navigator 对象提供了许多属性和方法,以下是一些常用的属性和方法:
-
navigator.userAgent:返回浏览器的用户代理字符串,其中包含了关于浏览器、操作系统和设备的信息。常用于检测浏览器类型和版本。 -
navigator.platform:返回浏览器运行的操作系统平台,例如 "Win32"、"MacIntel" 等。 -
navigator.language:返回浏览器的首选语言,通常是一个标准的语言标签,例如 "en-US"、"zh-CN" 等。 -
navigator.clipboard:提供访问剪贴板的能力。通过 navigator.clipboard 对象,您可以读取剪贴板内容或将文本、图像等内容写入剪贴板。 -
navigator.geolocation:提供获取用户位置信息的能力。通过 navigator.geolocation 对象,您可以使用浏览器的定位功能获取用户的经纬度坐标等位置信息。 -
navigator.cookieEnabled:返回一个布尔值,表示浏览器是否启用了 cookie。 -
navigator.onLine:返回一个布尔值,表示浏览器是否处于联网状态。 -
navigator.javaEnabled():返回一个布尔值,表示浏览器是否启用了 Java。 -
navigator.plugins:返回一个表示已安装插件的 PluginArray 对象,可以通过该对象获取有关已安装插件的信息。 -
navigator.mimeTypes:返回一个表示浏览器支持的 MIME 类型的 MimeTypeArray 对象,可以通过该对象获取有关 MIME 类型的信息。 -
navigator.sendBeacon(url, data):使用异步请求发送数据到指定的 URL,适用于在页面卸载前发送数据,以确保数据的可靠传输。 -
navigator.vibrate(pattern):触发设备振动效果,可以传递一个表示振动模式的数组作为参数。 -
navigator.getBattery():返回一个 Promise,用于获取设备的电池信息,包括电量、充电状态等。 -
navigator.mediaDevices.getUserMedia(constraints):请求用户授权访问媒体设备(如摄像头和麦克风),返回一个 Promise 对象,用于获取媒体流。
结语
建立这个平台的初衷:
-
打造一个仅包含前端问题的问答平台,让大家高效搜索处理同样问题。
-
通过不断积累问题,一起练习逻辑思维,并顺便学习相关的知识点。
-
遇到难题,遇到有共鸣的问题,一起讨论,一起沉淀,一起成长。
感谢关注微信公众号:“程序员大澈”,然后加入问答群,让我们一起解决实现所有BUG!
相关文章:
JS问题:如何实现文本一键复制和长按复制功能?
前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约2000字,整篇阅读大约需要4分钟。 本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。 …...
react实现步进器
创建一个步进器组件,包含当前步骤(currentStep)的状态以及前进和后退的操作: import React, { useState } from react;function Stepper() {const [currentStep, setCurrentStep] useState(1);const handleNext () > {setCu…...
【jenkins】centos7在线安装jenkins
一、系统要求 最低推荐配置 256MB可用内存 1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB) 软件配置 Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以 二、安装jenkins 准备一台安装有ce…...
Hive常用DDL操作
本专栏案例数据集链接: https://download.csdn.net/download/shangjg03/88478038 1. Database 1.1 查看数据库列表 show databases; 1.2 使用数据库 USE database_name;...
关于css中设置变量用于全局Css或者Js中使用
一、配置变量css文件 src/styles/variables.scss // 设置色值变量// 1、继承body中设置的样式内嵌style"--baseColor:#0075FF;" // 一般常用于Saas系统,如qiankun框架主应用决定子应用的样式 $primary: var(--baseColor, #0075FF); // 主色调࿰…...
Elasticsearch(十五)搜索---搜索匹配功能⑥--基于地理位置查询
一、前言 随着互联网的热门,越来越多的传统行业将全部或者部分业务转移到互联网上,其中不乏一些和地理位置强相关的行业。基于地理位置的搜索功能,大大提升了人们的生活和工作效率。例如,外出旅行时,只需要用手机打开…...
为什么axios会有params和data两个参数
不知道大家有没有过这种感觉,突然一个问题百思不得其解,然后突然有一天就明白了。然后就感觉这个问题原来这么简单,本来想记录下来,但是又感觉这么简单的问题记录下来没啥意义。但是回过头来想一想,这个问题之前其实困…...
Vite+Vue3项目全局引入scss文件
前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言!在日常项目开发过程中使用非常广泛,今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件,引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…...
android10.0(Q) MTK 6765 user版本打开root权限
前言 相比较 Android8.1、9.0 而言,Android10.0 版本 的 root变得相当麻烦,10.0 中引入了动态分区机制,同样的要想完全 adb root,需要 fastboot 解锁,然后关闭 verity 才能 adb remount 成功。我尝试和之前一样修改 f…...
软考 系统架构设计师系列知识点之设计模式(9)
接前一篇文章:软考 系统架构设计师系列知识点之设计模式(8) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 相关试题 7. 一组对象以定义良好但是复杂的方式进行通信,产生…...
LeetCode二分查找
搜索插入位置 description 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], tar…...
米软科技客户单病种上报量云南省第一
近日米软获悉,在云南省统计的单病种上报情况中,截止2021年11月15日,上线单病种系统不足半年的红河州第一人民医院(云南省滇南中心医院)以占全省上报总数5%的22950例,遥遥领先于同省各家二三级医院。 全省上…...
SpringCore完整学习教程5,入门级别
本章从第6章开始 6. JSON Spring Boot提供了三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的和默认的库。 6.1. Jackson 为Jackson提供了自动配置,Jackson是spring-boot-starter-json的一部分。当Jackson在类路径上时,将自动配置Obj…...
1024 云上见 · 上云挑战(ChatGPT搭建)
【玩转1024】使用函数计算X通义千问搭建AI助手,参与1024小说创作大赛 【使用函数计算X通义千问搭建AI助手,参与小说创作大赛】:本活动基于函数计算X 通义千问快速部署 AI 个人助手应用,用户可以根据需要选择不同角色的AI助手开启…...
Linux内核代码中常用的数据结构
Linux内核代码中广泛使用了数据结构和算法,其中最常用的两个是链表和红黑树。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。 链表的每个元素都是离散…...
自动驾驶,从“宠儿”走进“淘汰赛”
从“一步到位”到场景、技术降维。从拼落地路径,到拼雷达、算力,再到如今的性价比之争,自动驾驶似乎变得愈发“接地气”。 作者|斗斗 编辑|皮爷 出品|产业家 比起去年,黄文欢和张放今年显得更加忙碌。 “自动驾驶赛道&…...
Tensorflow2 中模型训练标签顺序和预测结果标签顺序不一致问题解决办法
本篇文章将详细介绍Tensorflow2.x中模型训练标签顺序和预测结果标签顺序不一致问题,这个问题如果考虑不周,或者标签顺序没有控制好的情况下会出现预测结果精度极其不准确的情况。 训练数据集的结构:数据集有超过10的类别数,这里包…...
uniapp 在 Android Studio 模拟器中运行项目
在开发App时,无论是使用 Flutter 还是 React native,还是使用uni-app 开发跨端App时,总是需要运行调试。一般调试分为两种。 第一:真机调试 第二:模拟器调试 真机调试的好处是可以看到更好的效果,缺点就是…...
淘宝API接口获取商品信息,订单管理,库存管理,数据分析
在淘宝开放平台中,每个API接口都有相应的文档说明和授权机制,以确保数据的安全性和可靠性。开发者可以根据自己的需求选择相应的API接口,并根据文档说明进行调用和使用。 淘宝开放平台API接口是一套REST方式的开放应用程序编程接口&…...
Azure - 机器学习企业级服务概述与介绍
目录 一、什么是 Azure 机器学习?大规模生成业务关键型机器学习模型 二、Azure 机器学习适合哪些人群?三、Azure 机器学习的价值点加快价值实现速度协作并简化 MLOps信心十足地开发负责任地设计 四、端到端机器学习生命周期的支持准备数据生成和训练模型…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
