Vue 长按文本复制事件实现

news/2024/7/10 3:22:09 标签: vue

longpress.js

export default {
    install(Vue, options = {
        time: 2000
    }) {
        Vue.directive('longpress', {
            bind: function (el, binding, vNode) {
                // 确保提供的表达式是函数        
                if (typeof binding.value !== 'function') {
                    // 获取组件名称            
                    const compName = vNode.context.name;
                    // 将警告传递给控制台            
                    let warn = `[longpress:] provided expression '${binding.expression}' is not afunction, but has to be `;
                    if (compName) { warn += `Found in component '${compName}' ` }
                    console.warn(warn);
                }
                // 定义变量
                let pressTimer = null;
                // 定义函数处理程序
                // 创建计时器( 1秒后执行函数 )
                let start = (e) => {
                    if (e.type === 'click' && e.button !== 0) {
                        return;
                    }
                    if (pressTimer === null) {
                        pressTimer = setTimeout(() => {
                            // 执行函数
                            handler();
                        }, options.time)
                    }
                }
                // 取消计时器
                let cancel = (e) => {
                    // 检查计时器是否有值
                    if (pressTimer !== null) {
                        clearTimeout(pressTimer);
                        pressTimer = null;
                    }
                }
                // 运行函数
                const handler = (e) => {
                    // 执行传递给指令的方法
                    binding.value(e)
                };
                // 添加事件监听器
                el.addEventListener("mousedown", start);
                el.addEventListener("touchstart", start);
                // 取消计时器
                el.addEventListener("click", cancel);
                el.addEventListener("mouseout", cancel);
                el.addEventListener("touchend", cancel);
                el.addEventListener("touchcancel", cancel);
            }
        })
    }
}

在main.js中引入

import LongPress from './longpress.js'
Vue.use(LongPress, { time: 1000 })
//time:长按时长,可自行定义

组件或页面中使用

<div v-longpress="() => copyContent(item)"></div>

copyContent函数

copyContent(str) {
  var input = document.createElement('input');
  input.setAttribute('readonly', 'readonly'); // 防止手机上弹出软键盘
  input.setAttribute('value', str);
  document.body.appendChild(input);
  input.select();
  document.execCommand('copy');
  document.body.removeChild(input);
}

http://www.niftyadmin.cn/n/1202683.html

相关文章

struts 2读书笔记-----Convention插件与“约定”支持

Convention插件的主要特点是“约定优于配置”。 Action的搜索和映射约定 为了能够使用Convention插件&#xff0c;必须在Struts 2 应用中安装Convention插件&#xff0c;即将Struts2-convention-plugin.jar文件复制到Struts 2应用的WEB-INF/lib路径下。 对于convention插件而言…

发送短信验证码-node+阿里云短信

一、准备工作 前端&#xff1a; 表单 提交方式--- get 、post 整体提交 ajax提交 表单验证 正则表达式---不轻易自己写正则&#xff0c;不是不写&#xff0c;一定要考虑好兼容性&#xff08;全面性&#xff09;---- 提示信息的选择性 图形验证码 后端进行提供的一张图片&…

微信小程序新分享功能

原分享api&#xff1a; //1、分享到朋友圈 wx.onMenuShareTimeline({title: , // 分享标题link: , // 分享链接&#xff0c;该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: , // 分享图标success: function () {// 用户点击了分享后执行的回调函数} },//2、…

Struts 2读书笔记-----通配符的使用

在我们配置Action时&#xff0c;发现struts.xml中的<action…/>的绝大部分都相同。这时我们可以通过使用struts 2 提供的通配符映射机制来处理这个问题。 我们在配置<action …./>时&#xff0c;允许在指定name属性时使用模式字符串&#xff08;即用“*”来代替一个…

补硒真的能防癌吗?

阅读更多系列文章请访问我的GitHub博客 写作原因 一天早上吃早餐的时候&#xff0c;妈妈跟我说今天早餐中有放一些富硒小麦胚芽&#xff0c;说是多补充硒&#xff0c;可以防癌。 我当时觉得这事不靠谱&#xff0c;就回了一句“根据我的了解&#xff0c;这事多半不靠谱”。 可妈…

图片压缩

插件对比&#xff1a; 一、compressorjs 1、使用方式 npm i compressorjs --save引入&#xff1a;import Compressor from ‘compressorjs’;使用&#xff1a; 2、压缩结果 &#xff08;图片原始大小为9.8M&#xff09;: &#xff08;图片原始大小为4.4M&#xff09;: 由…

linux服务器中运行图形界面程序,Xvfb -- 虚拟X server

为什么80%的码农都做不了架构师&#xff1f;>>> 首先安装Xvfb sudo apt-get install Xvfb 打开终端&#xff0c;执行 Xvfb :99 -ac 2>/dev/null & export DISPLAY:99 然后执行 >>firefox 发现命令行输出了启动的信息,但是浏览器界面就没有出现了…

vue项目将px转换为rem进行移动端适配

使用postcss-px2rem-exclude实现将px转换为rem进行移动端适配 安装依赖 npm install postcss-px2rem-exclude --save-dev.postcssrc.json添加&#xff1a; module.exports { ........ plugins:{"autoprefixer":{},postcss-px2rem-exclude:{remUnit:37.5,propList:…