成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

h5實(shí)現(xiàn)一鍵復(fù)制到粘貼板 兼容ios

miracledan / 2946人閱讀

摘要:是方法起始光標(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

相關(guān)文章

  • H5復(fù)制粘貼雙端適配的解決方案(終極版)

    摘要:前言最終適配所有機(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...

    keithyau 評(píng)論0 收藏0
  • 移動(dòng)端復(fù)制文本粘貼,clipboard.js的使用,移動(dòng)端與PC端復(fù)制粘貼兼容寫法

    摘要:首先引用文本文檔要用復(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不可編輯...

    legendmohe 評(píng)論0 收藏0
  • 移動(dòng)端復(fù)制文本粘貼,clipboard.js的使用,移動(dòng)端與PC端復(fù)制粘貼兼容寫法

    摘要:首先引用文本文檔要用復(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不可編輯...

    Caicloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<