vue如何重写移动端长按文字复制的功能

移动端长按文字会出现 “复制 全选”的默认弹框(这里拿安卓举例吧)

但是有的时候需要在长按的时候增加别的功能 这时候就需要禁用原生的弹框然后重写自己的功能

第一步:禁用掉原生弹窗 但是支持划选文字

重要css属性:

-webkit-touch-callout: none;

ps:-webkit-touch-callout: none; 是 CSS 样式属性,通常用于在WebKit内核的浏览器(如Chrome和Safari)中禁止长按链接或图片时默认的弹出菜单。这个属性可以帮助开发者在移动端网页开发中控制长按元素时的行为。

当你在某个元素上应用 -webkit-touch-callout: none; 样式时,长按该元素不会触发默认的弹出菜单,比如在图片上长按不会出现保存图片的选项,或者在链接上长按不会出现打开链接或复制链接的选项。

例如,可以将这个样式应用于图片元素来禁用默认的弹出菜单:

img {
    -webkit-touch-callout: none;
}

需要注意的是,这个样式属性仅在WebKit内核的浏览器中生效,其他浏览器可能需要使用不同的样式属性来实现类似的效果

现在就可以看到 文字长按有选中的区域 但是不会再弹出原生的复制全选了。

 下一步需要实现长按弹出自己封装的弹框

第二步:长按触发事件:

<template>
 <div @touchmove="onTouchMove($event)"
     @touchstart="touchstart($event, msgObject)"
	 @touchend="emptyTime()">
        {{'内容'}}
 <div>
</template>


<script>

methods: {
         touchstart(e,val){
            // return
            console.log(e,val)
            console.log('touchstart val====', val);
            // if (this.msgObject.msgFrom == '3' && this.msgObject.refSessionId)
            this.toucheX = e.targetTouches[0].screenX
            this.toucheY = e.targetTouches[0].screenY
            clearTimeout(this.Loop); //再次清空定时器,防止重复注册定时器
            this.Loop = setTimeout(function() {
               e.preventDefault()
               let nodeArr = document.getElementsByClassName("dropdown-content")
                if(Array.from(nodeArr).length>0){
                    Array.from(nodeArr).forEach(item => {
                    item.style.display = 'none'
                })
                }
                let nodeArrs = document.getElementsByClassName("dropdown-content-user")
                if(Array.from(nodeArrs).length>0){
                    Array.from(nodeArrs).forEach(item => {
                    item.style.display = 'none'
                })
                }

            }.bind(this), 800);
            console.log('touchstart事件触发了222')
            // 清除全局下的回复弹框
            this.removeReference()
            // this.$emit('on-touchstart',e)

        },   
        // 长按结束清空定时器
        emptyTime:function (e) {
            clearTimeout(this.Loop); //清空定时器,防止重复注册定时器
        },
        // 滑动的话取消长按监听
        onTouchMove (e) {
            const moveX = e.targetTouches[0].screenX
            const moveY = e.targetTouches[0].screenY
            // 解决vivo机型,手指没有move,touchmove事件仍然会调用而导致setTimeout被clear
            if (this.toucheX !== moveX || this.toucheY !== moveY) {
                // 手指滑动,清除定时器,中断长按逻辑
                this.Loop && clearTimeout(this.Loop)
            }
        },
}
</script>

tourchStart里面放置长按要触发的事件 可以是展示自己重写的弹框显示事件

 第三步: 实现复制功能:

使用的是vue-clipboard2": "^0.3.3"插件

弹框里面的复制按钮的代码:

<div
									@touchstart.stop
									@click.stop="copyMsgContent"
									v-clipboard:copy="copyContent"
									v-clipboard:success="onCopy"
									v-clipboard:error="onError"
									v-if="msgObject.msgType == '1'"
									class="app-tools-content"
								>
									<img src="../../assets/imgs/app_tools_copy.svg" />
									<p>复制</p>
								</div>

copyMsgContent方法:

copyMsgContent () {
const selectText = window.getSelection().toString()
				? window.getSelection().toString()
				: this.mobileSelectContent
				? this.mobileSelectContent
				: "";  // 获取当前window滑选的文字
this.copyContent = str; // 给绑定的copyContent赋值
} 

这样就实现了重写复制的功能~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/419815.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS Full SDK的安装

OpenHarmony的应用开发工具HUAWEI DevEco Studio现在随着OpenHarmony版本发布而发布,只能在版本发布说明中下载,例如最新版本的OpenHarmony 4.0 Release。对应的需要下载DevEco Studio 4.0 Release,如下图。 图片 下载Full SDK主要有两种方式,一种是通过DevEco Studio下载…

【毛毛讲书】【时间贫困】时间都去哪了?

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容&#xff…

查看网络连接的netstat

netstat是一个监控TCP/IP网络的非常有用的工具&#xff0c;可以显示路由表、实际的网络连接&#xff0c;以及每一个网络接口设备的状态信息&#xff0c;可以让用户得知目前都有哪些网络连接正在运作。netstat用户显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用…

文件怎么减小内存?4个简单的方法~

随着我们在电脑或移动设备上创建、下载和收集越来越多的文件&#xff0c;存储空间的管理变得尤为重要。有时&#xff0c;文件太大会占用过多的内存&#xff0c;导致存储空间不足的问题。但别担心&#xff0c;本文将向您介绍五种简单有效的方法&#xff0c;帮助您轻松减小文件的…

微信云开发-- Mac安装 wx-server-sdk依赖

第一次上传部署云函数时&#xff0c;会提示安装依赖wx-server-sdk 一. 判断是否安装wx-server-sdk依赖 先创建一个云函数&#xff0c;然后检查云函数目录。 如果云函数目录下只显示如下图所示三个文件&#xff0c;说明未安装依赖。 如果云函数目录下显示如下图所示四个文件&a…

YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 1. 概要1.1 模型结构上的改动:1.2 训练脚本上的改动&#xff1a; 2. 介绍2.1 背景2.2 主要贡献 3. 总体框架3.1 可编程梯度信息&#xff08;PGI&#xff09;3.1.1 辅助可逆分支3.1.2 多级辅助信息 3.2 Ge…

浅析能耗监测系统在大型数据中心的应用

彭姝麟 Acrelpsl 1总体设计 大型数据中心能耗监测系统包含硬件和软件两大部分&#xff0c;其硬件组成主要包括监控服务器、主机设备、网络设备、环境参数传感器、通风模块等&#xff0c;总体采集逻辑采用三级监控体系。一级为主机设备&#xff0c;作为系统的应用层&#xff0c…

JS正则02——js正则表达式中常用的方法、常见修饰符的使用详解以及各种方法使用情况示例

JS正则02——js正则表达式中常用的方法、常见修饰符的使用详解以及各种方法使用情况示例 1. 前言1.1 简介1.2 js正则特殊字符即使用示例 2. 创建正则表达式的方式2.1 两种创建正则表达式的方式2.2 关于修饰符 3. 正则表达式中常用的方法3.1 test() 方法——正则表达式对象的方法…

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时&#xff0c;需要输出相关日志信息&#xff0c;方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…

【Leetcode每日一刷】哈希表|纲领、242.有效的字母异位词、349. 两个数组的交集

纲领 &#x1f517;代码随想录理论部分 关于哈希表这个数据结构就不再重复讲了&#xff0c;下面对几个关键点记录一下&#xff1a; 哈希碰撞 解决方法1&#xff1a;拉链法 解决方法2&#xff1a;线性探测法 下面针对做题要用到的三种结构讲一下&#xff08;也是重复造轮子了…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题 1

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps 开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源 OpenStack …

C++:String类的使用

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 在C语言中&#xff0c;我们想要存储字符串的话必须要用字符数组 char str[]"hello world"这其实是将在常量区的常量字符串拷贝到数组中&#xff0c;我们会在数组的结尾多开一个空间存储\0&#xff0c;这样我…

52.2k star! 自己部署gpt4free, 免费使用各种GPT

GPT4Free是一个由开发者Xtekky在GitHub上发布的开源项目&#xff0c;它可以免费地使用GPT-3.5、GPT-4、llama、gemini-pro、bard、claude等多种大模型。截止到当前(2024.1.30)已经有52.2k star&#xff0c;可见其受欢迎程度。 github地址&#xff1a;https://github.com/xtekky…

如何解决代理ip服务器连接问题

在当今的数字化时代&#xff0c;互联网连接已成为生活和工作中不可或缺的一部分。然而&#xff0c;在尝试访问互联网资源时&#xff0c;用户有时会遇到“代理服务器可能有问题&#xff0c;或地址不正确(你尚未连接)”的错误提示。这种情况通常表明计算机的网络设置存在问题&…

根据二层封装协议决定—网络类型

目录 一、网络类型的分类 二、数据链路层协议 MA网络 以太网协议 P2P网络 一、网络类型的分类 P2P --- point to point --- 点到点网络 MA --- Multi-Access Network --- 多点接入网络 BMA --- Broadcast Multi-Access Network --- 广播型多点接入网络 NBMA --- Non-Bro…

云计算 2月20号 (认识操作系统)

1、认识操作系统 计算机系统的组成 知识点1&#xff1a;没有软件系统的计算机称之为"裸机" 知识点2&#xff1a;裸机提供基本的可计算性资源 知识点3&#xff1a;操作系统是最靠近硬件的软件层&#xff0c;负责管理和控制计算机硬件。 计算机硬件组成五大部件 运算器…

Variant AutoEncoder(VAE)和 VQVAE 学习笔记和代码

参考&#xff1a; [1] VAE1 [2] https://lilianweng.github.io/posts/2018-08-12-vae/ [3] VAE Code 进食顺序 1 VAE1.1 VAE的直观理解1.2 VAE数学推导1.2.1 混合高斯模型角度理解VAE&#xff08;李宏毅ML课的说法&#xff09;1.2.2 隐空间角度理解以及ELBO&#xff08;变分下界…

登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风

登录页给潜在用户传递了产品的品牌调性&#xff0c;是非常重要的一类页面&#xff0c;之前2.5D和插画风格的登录页流行一时&#xff0c;不过这阵风好像过去了&#xff0c;新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理&#xff0c;使得…

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络&#xff0c;能够学习数据中的长期依赖关系&#xff0c;这是因为模型的循环模块具有相互交互的四个层的组合&#xff0c;它可以记忆不定时间长度的数值&#xff0c;区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟&#xff0c;人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制&#xff0c;人工智能在“传统”行业的落地不如消费互联网行业&#xff0c;但是借助人工智能为“传统”行业的发展注入新能量一直是相关…