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