摘要:是方法起始光標(biāo)結(jié)束光標(biāo)不兼容蘋果復(fù)制文字必須手動(dòng)觸發(fā)點(diǎn)擊事件或者其他事件,不能直接使用調(diào)用實(shí)現(xiàn)一鍵復(fù)制到粘貼板兼容兼容性補(bǔ)充移動(dòng)端安卓手機(jī)微信和幾個(gè)手機(jī)瀏覽器都可以用。
實(shí)現(xiàn)原理
采用document.execCommand("copy")來實(shí)現(xiàn)復(fù)制到粘貼板功能
復(fù)制必須是選中input框的文字內(nèi)容,然后執(zhí)行document.execCommand("copy")命令實(shí)現(xiàn)復(fù)制功能。
初步實(shí)現(xiàn)方案
const input = document.querySelector("#copy-input"); if (input) { input.value = text; if (document.execCommand("copy")) { input.select(); document.execCommand("copy"); input.blur(); alert("已復(fù)制到粘貼板"); } }兼容性問題
input 輸入框不能hidden或者display: none;
如果需要隱藏輸入框可以使用定位脫離文檔流,然后移除屏幕
#copy-input{ position: absolute; left: -1000px; z-index: -1000; }
2.ios下不能執(zhí)行document.execCommand("copy")
在ios設(shè)備下alert(document.execCommand("copy"))一直返回false
查閱相關(guān)資料發(fā)現(xiàn)ios下input不支持input.select();
因此拷貝的文字必須存在,不能為空字符串,不然也不會(huì)執(zhí)行復(fù)制空字符串的功能
參考這篇博客實(shí)現(xiàn)了ios下復(fù)制的功能 https://blog.csdn.net/VLilyV/...
主要是使用textbox.createTextRange方法選中輸入框的文字
// input自帶的select()方法在蘋果端無法進(jìn)行選擇,所以需要自己去寫一個(gè)類似的方法 // 選擇文本。createTextRange(setSelectionRange)是input方法 function selectText(textbox, startIndex, stopIndex) { if (textbox.createTextRange) {//ie const range = textbox.createTextRange(); range.collapse(true); range.moveStart("character", startIndex);//起始光標(biāo) range.moveEnd("character", stopIndex - startIndex);//結(jié)束光標(biāo) range.select();//不兼容蘋果 } else {//firefox/chrome textbox.setSelectionRange(startIndex, stopIndex); textbox.focus(); } }
3.ios設(shè)備上復(fù)制會(huì)觸發(fā)鍵盤彈出事件
給input加上readOnly只讀屬性
代碼踩完以上的坑,總結(jié)的代碼如下
git地址 https://github.com/zhaosheng8...
copyText = (text) => { // 數(shù)字沒有 .length 不能執(zhí)行selectText 需要轉(zhuǎn)化成字符串 const textString = text.toString(); let input = document.querySelector("#copy-input"); if (!input) { input = document.createElement("input"); input.id = "copy-input"; input.readOnly = "readOnly"; // 防止ios聚焦觸發(fā)鍵盤事件 input.style.position = "absolute"; input.style.left = "-1000px"; input.style.zIndex = "-1000"; document.body.appendChild(input) } input.value = textString; // ios必須先選中文字且不支持 input.select(); selectText(input, 0, textString.length); console.log(document.execCommand("copy"), "execCommand"); if (document.execCommand("copy")) { document.execCommand("copy"); alert("已復(fù)制到粘貼板"); } input.blur(); // input自帶的select()方法在蘋果端無法進(jìn)行選擇,所以需要自己去寫一個(gè)類似的方法 // 選擇文本。createTextRange(setSelectionRange)是input方法 function selectText(textbox, startIndex, stopIndex) { if (textbox.createTextRange) {//ie const range = textbox.createTextRange(); range.collapse(true); range.moveStart("character", startIndex);//起始光標(biāo) range.moveEnd("character", stopIndex - startIndex);//結(jié)束光標(biāo) range.select();//不兼容蘋果 } else {//firefox/chrome textbox.setSelectionRange(startIndex, stopIndex); textbox.focus(); } } }; // 復(fù)制文字 // 必須手動(dòng)觸發(fā) 點(diǎn)擊事件或者其他事件,不能直接使用js調(diào)用!??! copyText("h5實(shí)現(xiàn)一鍵復(fù)制到粘貼板 兼容ios") /*兼容性補(bǔ)充: 移動(dòng)端: 安卓手機(jī):微信(chrome)和幾個(gè)手機(jī)瀏覽器都可以用。 蘋果手機(jī):微信里面和sarafi瀏覽器里也都可以, PC:sarafi版本必須在10.2以上,其他瀏覽器可以. 兼容性測(cè)試網(wǎng)站:https://www.caniuse.com/ */ .
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104850.html
摘要:前言最終適配所有機(jī)型的方案基于官網(wǎng)這個(gè)庫由幾個(gè)不同的提供商托管。提供的復(fù)制失敗的方法,進(jìn)行復(fù)制失敗提示復(fù)制失敗請(qǐng)手動(dòng)選擇復(fù)制。上其他相關(guān)分享使用實(shí)現(xiàn)前端頁面復(fù)制到粘貼板的功能中配合實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪切板 前言 最終適配所有機(jī)型的方案基于clipboardjs官網(wǎng)https://clipboardjs.com/ 這個(gè)庫由幾個(gè)不同的CDN提供商托管。選擇你最喜歡的:) 建議使用 v...
摘要:首先引用文本文檔要用復(fù)制按鈕要用去掉文字檢查,不可編輯,插件自帶的屬性樣式代碼至此,兼容移動(dòng)端和端的復(fù)制粘貼功能完美實(shí)現(xiàn),感謝作者作者來源原文版權(quán)聲明本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接 1.首先引用clipboard.js 2.html 文本文檔要用textarea,復(fù)制按鈕要用button 9999999 spellcheck=false去掉文字檢查,readonly不可編輯...
摘要:首先引用文本文檔要用復(fù)制按鈕要用去掉文字檢查,不可編輯,插件自帶的屬性樣式代碼至此,兼容移動(dòng)端和端的復(fù)制粘貼功能完美實(shí)現(xiàn),感謝作者作者來源原文版權(quán)聲明本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接 1.首先引用clipboard.js 2.html 文本文檔要用textarea,復(fù)制按鈕要用button 9999999 spellcheck=false去掉文字檢查,readonly不可編輯...
閱讀 2234·2021-11-22 09:34
閱讀 1346·2021-10-11 10:59
閱讀 4447·2021-09-22 15:56
閱讀 3301·2021-09-22 15:08
閱讀 3412·2019-08-30 14:01
閱讀 784·2019-08-30 11:16
閱讀 1137·2019-08-26 13:51
閱讀 2919·2019-08-26 13:43