亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么進行Vue自定義復制指令v-copy功能的實現

發布時間:2022-01-10 00:41:10 來源:億速云 閱讀:352 作者:柒染 欄目:開發技術

這篇文章給大家介紹怎么進行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功能的實現就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

秭归县| 蓝山县| 大余县| 柳江县| 大化| 石林| 天柱县| 余江县| 花莲市| 义马市| 隆林| 增城市| 兰州市| 乌鲁木齐县| 潢川县| 双江| 滁州市| 简阳市| 和平区| 合肥市| 荔浦县| 个旧市| 康乐县| 巨鹿县| 新绛县| 乐亭县| 通道| 伊吾县| 南皮县| 时尚| 轮台县| 大新县| 广东省| 东海县| 张家口市| 元氏县| 安龙县| 菏泽市| 云霄县| 平遥县| 祥云县|