最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue使用自定義指令實(shí)現(xiàn)一鍵復(fù)制功能

 更新時(shí)間:2024年09月10日 12:02:29   作者:Frilled Lizard  
在Vue中,通過自定義指令v-copy和document.execCommand方法,可以實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪貼板的功能,適用于處理長文本或多行文本的復(fù)制需求,而readonly屬性可避免內(nèi)容被修改和移動(dòng)設(shè)備上的虛擬鍵盤干擾,感興趣的朋友一起看看吧

1.使用document.execCommand(棄用)

import { Message } from 'ant-design-vue';
const vCopy = { //
  /*
    bind 鉤子函數(shù),第一次綁定時(shí)調(diào)用,可以在這里做初始化設(shè)置
    el: 作用的 dom 對(duì)象
    value: 傳給指令的值,也就是我們要 copy 的值
  */
  bind(el, { value }) {
    el.$value = value; // 用一個(gè)全局屬性來存?zhèn)鬟M(jìn)來的值,因?yàn)檫@個(gè)值在別的鉤子函數(shù)里還會(huì)用到
    el.handler = () => {
      if (!el.$value) {
      // 值為空的時(shí)候,給出提示,我這里的提示是用的 ant-design-vue 的提示,你們隨意
        Message.warning('無復(fù)制內(nèi)容');
        return;
      }
      // 動(dòng)態(tài)創(chuàng)建 textarea 標(biāo)簽
      const textarea = document.createElement('textarea');
      // 將該 textarea 設(shè)為 readonly 防止 iOS 下自動(dòng)喚起鍵盤,同時(shí)將 textarea 移出可視區(qū)域
      textarea.readOnly = 'readonly';
      textarea.style.position = 'absolute';
      textarea.style.left = '-9999px';
      // 將要 copy 的值賦給 textarea 標(biāo)簽的 value 屬性
      textarea.value = el.$value;
      // 將 textarea 插入到 body 中
      document.body.appendChild(textarea);
      // 選中值并復(fù)制
      textarea.select();
      // textarea.setSelectionRange(0, textarea.value.length);
      const result = document.execCommand('copy');
      if (result) {
        Message.success('復(fù)制成功');
      }
      document.body.removeChild(textarea);
    };
    // 綁定點(diǎn)擊事件,就是所謂的一鍵 copy 啦
    el.addEventListener('click', el.handler);
  },
  // 當(dāng)傳進(jìn)來的值更新的時(shí)候觸發(fā)
  componentUpdated(el, { value }) {
    el.$value = value;
  },
  // 指令與元素解綁的時(shí)候,移除事件綁定
  unbind(el) {
    el.removeEventListener('click', el.handler);
  },
};
export default vCopy;
<template>
  <div>
    <input v-model="text" placeholder="輸入要復(fù)制的內(nèi)容" />
    <button v-copy="text">點(diǎn)擊復(fù)制</button>
  </div>
</template>
<script>
import vCopy from './directives';
export default {
  data () {
    return {
      text: '這是要復(fù)制的內(nèi)容'  // 默認(rèn)的復(fù)制內(nèi)容
    };
  },
  directives: {
    copy: vCopy
  }
};
</script>
  • 自定義指令 v-copy 綁定到按鈕上,點(diǎn)擊按鈕時(shí)會(huì)復(fù)制綁定的內(nèi)容。
  • el.$value 保存了要復(fù)制的內(nèi)容,在每次點(diǎn)擊時(shí)通過 document.execCommand(‘copy’) 復(fù)制到剪貼板。
  • 當(dāng)輸入框內(nèi)容變化時(shí),componentUpdated 鉤子會(huì)更新復(fù)制的內(nèi)容。

execCommand 是一種用于執(zhí)行與用戶操作相關(guān)的命令的方法,主要用于在文檔上執(zhí)行剪貼板操作(如復(fù)制、剪切、粘貼)或格式化操作(如加粗、斜體、下劃線)。還可以使用:“copy”、“cut”、“paste”、“bold”、“italic”

textarea標(biāo)簽:

  • 支持選中和復(fù)制操作:textarea 標(biāo)簽的內(nèi)容可以被瀏覽器原生地選中,并且它能夠被復(fù)制到剪貼板。復(fù)制操作依賴于選中文本,而 textarea 和 input 元素是 HTML 中可以輕松選中文本內(nèi)容的表單元素。雖然 input 標(biāo)簽也可以用于復(fù)制文本,但相比于 textarea,input 標(biāo)簽有一些局限性,特別是在處理較長文本或多行文本時(shí)。
  • textarea 標(biāo)簽支持 readonly 屬性,可以確保它的內(nèi)容在被復(fù)制之前不會(huì)被修改。將 textarea 設(shè)置為 readonly 能避免在移動(dòng)設(shè)備上點(diǎn)擊時(shí)喚起虛擬鍵盤,避免不必要的用戶干擾。

2.Clipboard API

Clipboard API 是一個(gè)現(xiàn)代的 Web API,用于在網(wǎng)頁上執(zhí)行剪貼板操作(如復(fù)制和粘貼)。與 document.execCommand 不同,Clipboard API 提供了更現(xiàn)代的異步接口,并且支持在 HTTPS 頁面上執(zhí)行這些操作以確保安全性。
Clipboard API 的方法返回一個(gè) Promise,這意味著你可以使用 then 和 catch 方法來處理成功和失敗的情況。

實(shí)現(xiàn)一鍵粘貼的功能:

使用 navigator.clipboard.readText() 方法從剪貼板讀取文本:

let vCopy = {
  bind (el, { value }) {
    el.$value = value;
    el.handler = async () => {
      if (!el.$value) {
        console.log('沒有要復(fù)制的內(nèi)容');
        return;
      }
      try {
        // 直接使用 Clipboard API 復(fù)制
        await navigator.clipboard.writeText(el.$value);
        console.log('復(fù)制成功');
      } catch (err) {
        console.error('復(fù)制失敗', err);
      }
    };
    // 監(jiān)聽點(diǎn)擊事件
    el.addEventListener('click', el.handler);
  },
  componentUpdated (el, { value }) {
    el.$value = value;
  },
  unbind (el) {
    el.removeEventListener('click', el.handler);
  }
};
export default vCopy;
<template>
  <div>
    <input v-model="text" placeholder="輸入要復(fù)制的內(nèi)容" />
    <button v-copy="text">點(diǎn)擊復(fù)制</button>
  </div>
</template>
<script>
import vCopy from './directives';
export default {
  data () {
    return {
      text: '這是要復(fù)制的內(nèi)容'  // 默認(rèn)的復(fù)制內(nèi)容
    };
  },
  directives: {
    copy: vCopy
  }
};
</script>

navigator 是 window 對(duì)象的一個(gè)屬性,提供了有關(guān)用戶瀏覽器的信息和一些特定的功能。

主要功能:

  • 提供有關(guān)用戶代理(瀏覽器)和操作系統(tǒng)的信息。
  • 提供瀏覽器的語言設(shè)置和在線狀態(tài)等信息。提供對(duì)剪貼板操作、地理位置、媒體設(shè)備等現(xiàn)代瀏覽器功能的訪問。
  • 拓展: 使用 navigator.clipboard.writeText() 方法將文本寫入剪貼板:
<template>
  <div>
    <input v-model="text" placeholder="輸入要復(fù)制的內(nèi)容" />
    <button @click="copyToClipboard">點(diǎn)擊復(fù)制</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      text: '默認(rèn)要復(fù)制的內(nèi)容'
    };
  },
  methods: {
    copyToClipboard() {
      navigator.clipboard.writeText(this.text).then(() => {
        console.log('文本已成功復(fù)制到剪貼板');
      }).catch(err => {
        console.error('復(fù)制失敗', err);
      });
    }
  }
};
</script>

到此這篇關(guān)于vue使用自定義指令實(shí)現(xiàn)一鍵復(fù)制的文章就介紹到這了,更多相關(guān)vue一鍵復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue起步(無cli)的啊教程詳解

    Vue起步(無cli)的啊教程詳解

    本文通過實(shí)例代碼給大家介紹了Vue起步(無cli)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-04-04
  • vue設(shè)置默認(rèn)首頁的操作

    vue設(shè)置默認(rèn)首頁的操作

    這篇文章主要介紹了vue設(shè)置默認(rèn)首頁的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue3中頁面跳轉(zhuǎn)方式總結(jié)

    Vue3中頁面跳轉(zhuǎn)方式總結(jié)

    Vue.js?是一個(gè)用于構(gòu)建用戶界面的漸進(jìn)式?JavaScript?框架,它提供了多種方法來實(shí)現(xiàn)頁面之間的導(dǎo)航,本文將詳細(xì)介紹?Vue?3?中的各種頁面跳轉(zhuǎn)方式,有需要的小伙伴可以參考一下
    2024-12-12
  • vue中wangEditor的使用及回顯數(shù)據(jù)獲取焦點(diǎn)的方法

    vue中wangEditor的使用及回顯數(shù)據(jù)獲取焦點(diǎn)的方法

    最近在寫vue的項(xiàng)目中,遇到一個(gè)需求,點(diǎn)擊編輯,顯示彈框,在彈框中的富文本編輯器中編輯自定義文本樣式,可以上傳圖片并回顯。接下來通過本文給大家介紹vue中wangEditor的使用及回顯數(shù)據(jù)獲取焦點(diǎn)的問題,一起看看吧
    2021-09-09
  • Vue3學(xué)習(xí)之表單的使用示例詳解

    Vue3學(xué)習(xí)之表單的使用示例詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3中表單的使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們掌握Vue3有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • Vue v-for中的 input 或 select的值發(fā)生改變時(shí)觸發(fā)事件操作

    Vue v-for中的 input 或 select的值發(fā)生改變時(shí)觸發(fā)事件操作

    這篇文章主要介紹了Vue v-for中的 input 或 select的值發(fā)生改變時(shí)觸發(fā)事件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vant如何實(shí)現(xiàn)Collapse折疊面板標(biāo)題自定義

    vant如何實(shí)現(xiàn)Collapse折疊面板標(biāo)題自定義

    這篇文章主要介紹了vant如何實(shí)現(xiàn)Collapse折疊面板標(biāo)題自定義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue中多個(gè)有順序要求的異步操作處理

    詳解vue中多個(gè)有順序要求的異步操作處理

    這篇文章主要介紹了vue中多個(gè)有順序要求的異步操作處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vue 組件數(shù)據(jù)加載解析順序的詳細(xì)代碼

    vue 組件數(shù)據(jù)加載解析順序的詳細(xì)代碼

    Vue.js的解析順序可以概括為:模板編譯、組件創(chuàng)建、數(shù)據(jù)渲染、事件處理和生命周期鉤子函數(shù)執(zhí)行,接下來通過本文給大家介紹vue 組件數(shù)據(jù)加載解析順序的完整代碼,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • VsCode里的Vue模板的實(shí)現(xiàn)

    VsCode里的Vue模板的實(shí)現(xiàn)

    這篇文章主要介紹了VsCode里的Vue模板的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

大连市| 长寿区| 鄂托克前旗| 临澧县| 延安市| 庆安县| 藁城市| 新沂市| 玉环县| SHOW| 垦利县| 临夏县| 峨山| 东乌珠穆沁旗| 平武县| 泽库县| 会同县| 凯里市| 浦北县| 巢湖市| 安远县| 陆丰市| 太仆寺旗| 澄城县| 连城县| 邳州市| 留坝县| 舒城县| 新源县| 三穗县| 平果县| 花垣县| 太谷县| 彭州市| 华安县| 互助| 高邑县| 邵阳县| 鱼台县| 大同市| 穆棱市|