Vue自定义复制指令 v-copy功能的实现

 更新时间:2022年01月08日 15:15:18   作者:敢敢的憨憨~  
这篇文章主要介绍了Vue自定义复制指令 v-copy,使用自定义指令创建一个点击复制文本功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

使用自定义指令创建一个点击复制文本功能

1. 创建v-copy.js文件

import Vue from "vue";
// 注册一个全局自定义复制指令 `v-copy`
Vue.directive("copy", {
  bind(el, { value }) {
    el.$value = value;
    el.handler = () => {
      el.style.position = 'relative';
      if (!el.$value) {
        // 值为空的时候,给出提示
        alert('无复制内容');
        return
      }
      // 动态创建 textarea 标签
      const textarea = document.createElement('textarea');
      // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域
      textarea.readOnly = 'readonly';
      textarea.style.position = 'absolute';
      textarea.style.top = '0px';
      textarea.style.left = '-9999px';
      textarea.style.zIndex = '-9999';
      // 将要 copy 的值赋给 textarea 标签的 value 属性
      textarea.value = el.$value
      // 将 textarea 插入到 el 中
      el.appendChild(textarea);
      // 兼容IOS 没有 select() 方法
      if (textarea.createTextRange) {
        textarea.select(); // 选中值并复制
      } else {
        textarea.setSelectionRange(0, el.$value.length);
        textarea.focus();
      }
      const result = document.execCommand('Copy');
      if (result) alert('复制成功');
      el.removeChild(textarea);
    }
    el.addEventListener('click', el.handler); // 绑定点击事件
  },
  // 当传进来的值更新的时候触发
  componentUpdated(el, { value }) {
    el.$value = value;
  },
  // 指令与元素解绑的时候,移除事件绑定
  unbind(el) {
    el.removeEventListener('click', el.handler);
  },
});

2. 引入v-copy

//  main.js 根据文件的相关路径引入v-copy.js文件
import "xx/v-copy.js"; // v-copy 指令

3. 在标签使用v-copy

<span v-copy="复制内容">复制</span>

补充:Vue 自定义指令合集 (文本内容复制指令 v-copy)

我们常常在引入全局功能时,主要都是写于 js 文件、组件中。不同于他们在使用时每次需要引用或注册,在使用上指令更加简洁。

今天主要实现的是一个复制文本指令*v-copy*,其中主要的参数有两个icondblclick

参数说明
dblclick双击复制
icon添加icon复制按钮,单击按钮实现复制

代码如下:

bind(el, binding) {
    if (binding.modifiers.dblclick) {
        el.addEventListener("dblclick", () => handleClick(el.innerText));
        el.style.cursor = "copy";
    } else if (binding.modifiers.icon) {
        el.addEventListener("mouseover", () => {
            if (el.hasicon) return;
            const icon = document.createElement("em");
            icon.setAttribute("class", "demo");
            icon.setAttribute("style", "{margin-left:5px,color:red}");
            icon.innerText = "复制";
            el.appendChild(icon);
            el.hasicon = true;
            icon.addEventListener("click", () => handleClick(el.innerText));
            icon.style.cursor = "pointer";
        });
        el.addEventListener("mouseleave", () => {
            let em = el.querySelector("em");
            el.hasicon = false;
            el.removeChild(em);
        });
    } else {
        el.addEventListener("click", () => handleClick(el.innerText));
        el.style.cursor = "copy";
    }
    function handleClick(content) {
        if (Window.clipboardData) {
            window.Clipboard.setData("text", content);
            return;
        } else {
            (function(content) {
                document.oncopy = function(e) {
                    e.clipboardData.setData("text", content);
                    e.preventDefault();
                    document.oncopy = null;
                };
            })(content);
            document.execCommand("Copy");
        }
    }
},

到此这篇关于Vue自定义复制指令 v-copy功能的实现的文章就介绍到这了,更多相关Vue复制指令 v-copy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Vue3使用axios的配置教程详解

    关于Vue3使用axios的配置教程详解

    道axios是一个库,并不是vue中的第三方插件,下面这篇文章主要给大家介绍了关于Vue3使用axios的配置教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • vue3+vite使用环境变量.env的一些配置情况详细说明

    vue3+vite使用环境变量.env的一些配置情况详细说明

    开发中经常会使用环境变量,Vite相比于Webpack也有一定的变化,下面这篇文章主要给大家介绍了关于vue3+vite使用环境变量.env的一些配置情况说明的相关资料,需要的朋友可以参考下
    2022-12-12
  • vue 界面刷新数据被清除 localStorage的使用详解

    vue 界面刷新数据被清除 localStorage的使用详解

    今天小编就为大家分享一篇vue 界面刷新数据被清除 localStorage的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue-cli3 配置开发与测试环境详解

    vue-cli3 配置开发与测试环境详解

    这篇文章主要介绍了vue-cli3 配置开发与测试环境详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • VUE+element开发后台管理的搜索功能

    VUE+element开发后台管理的搜索功能

    这篇文章主要为大家详细介绍了VUE+element开发后台管理的搜索功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue路由切换页面不更新问题解决方案

    Vue路由切换页面不更新问题解决方案

    这篇文章主要介绍了Vue路由切换页面不更新问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • vue如何实现清空this.$route.query的值

    vue如何实现清空this.$route.query的值

    这篇文章主要介绍了vue如何实现清空this.$route.query的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 详解vue添加删除元素的方法

    详解vue添加删除元素的方法

    本篇文章给大家分享了vue添加删除元素的方法以及相关实例代码,有兴趣的朋友参考一下。
    2018-06-06
  • 使用vue制作滑动标签

    使用vue制作滑动标签

    这篇文章主要为大家详细介绍了使用vue制作滑动标签,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip

    VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip

    这篇文章主要介绍了VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论