實現(xiàn)前端點擊按鈕自動復(fù)制剪貼板功能

【目錄】

  • 明確需求
  • html分析
    • 代碼實現(xiàn)
  • css分析
  • js分析
    • 代碼實現(xiàn)

只要是文本予权,長按選中就可以復(fù)制,但是需求來了擋也擋不住:

明確需求

為了提升用戶體驗棒掠,點擊【復(fù)制】按鈕就自動復(fù)制到剪貼板者祖,那么就需要前端實現(xiàn)這種功能了立莉。

首先明確了需求就先看一下最終圖片:


copy.jpg

html分析

左邊是一個input的文本框,只讀七问,右邊是一個按鈕蜓耻。

代碼實現(xiàn):

<!--左邊是一個input輸入框,要求只讀烂瘫,而且里面的內(nèi)容通過url?后面的code傳入-->
<input type="text" value="AJS4EFS" readonly id="textAreas"/>
<!--右邊是一個按鈕-->
<a href="javascript:;" class="cuteShareBtn" id="copy">復(fù)制</a>

css分析

這種東西就跳過吧媒熊,不是重點。

js分析

  1. 點擊按鈕獲取input對象

解決方法:

  1. 如果使用的jquery坟比,那么直接$("#textArea").select()選中的就是這個input對象
  2. 如果使用的zepto芦鳍,上面的方法是獲取到的zepto對象是不支持原生select()方法的,那么就使用原生的辦法
    var obj = document.getElementById("textAreas");
    obj.select();
  1. 然后復(fù)制到剪貼板

兩行葛账?看起來是不是很簡單柠衅?哈哈~那你就錯了,這里面是有坑的籍琳。
第一目前沒有一個很完美的方法可以兼容各個瀏覽器和移動端菲宴,引用插件也是一樣的。
查了半天最好的辦法就是使用 document.execCommand("Copy")
兼容性是不錯的:

use1.jpg

use.jpg

手機安卓支持到4.1趋急、各種瀏覽器是可以的喝峦,但是唯獨ios是不支持的,來給我把刀呜达,ios你這玩意你限制是干什么谣蠢?是要保護手機安全還是咋的。
所以只是pc端 使用那么就下面幾行代碼就可以搞定了:

//復(fù)制按鈕事件綁定
$("#copy").on("tap",function(){
  //獲取input對象
  var obj = document.getElementById("textAreas");
  //選擇當前對象
  obj.select(); 
  try{
    //進行復(fù)制到剪切板
    if(document.execCommand("Copy","false",null)){
      //如果復(fù)制成功
      alert("復(fù)制成功查近!");  
    }else{
      //如果復(fù)制失敗
      alert("復(fù)制失斆减狻!");
    }
  }catch(err){
    //如果報錯
    alert("復(fù)制錯誤霜威!")
  }
})

那如果是移動端 的話谈喳,就要兼容IOS,但是依然在iPhone5的10.2的系統(tǒng)中戈泼,依然顯示復(fù)制失敗婿禽,由于用戶使用率較低赏僧,兼容就做到這里,那些用戶你們就自己手動復(fù)制吧谈宛。
下面的兩種方法都可以進行復(fù)制次哈,因為核心代碼就那么幾行,先來簡單的:

$("#copy").on("tap",function(){
  //獲取input對象
  var obj = document.getElementById("textAreas");
  //如果是ios端
  if(isiOSDevice){
    // 獲取元素內(nèi)容是否可編輯和是否只讀
    var editable = obj.contentEditable;
    var readOnly = obj.readOnly;

    // 將對象變成可編輯的
    obj.contentEditable = true;
    obj.readOnly = false;

    // 創(chuàng)建一個Range對象吆录,Range 對象表示文檔的連續(xù)范圍區(qū)域窑滞,如用戶在瀏覽器窗口中用鼠標拖動選中的區(qū)域
    var range = document.createRange();
   //獲取obj的內(nèi)容作為選中的范圍
    range.selectNodeContents(obj);
    
    var selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);

    obj.setSelectionRange(0, 999999);  //選擇范圍,確保全選
    //恢復(fù)原來的狀態(tài)
    obj.contentEditable = editable;
    obj.readOnly = readOnly;
    //如果是安卓端    
  }else{
    obj.select();
  }
  try{
    if(document.execCommand("Copy","false",null)){
      alert("復(fù)制成功恢筝!");  
    }else{
      alert("復(fù)制失敯馈!請手動復(fù)制撬槽!");
    }
  }catch(err){
    alert("復(fù)制錯誤此改!請手動復(fù)制!")
  }
})

下面是一個比較完整的升級版方法侄柔,和插件Clipboard.js一樣共啃,不過代碼不多,就直接拿來用好了暂题。
這個獲取的不是input對象移剪,而是需要復(fù)制的內(nèi)容。

//定義函數(shù)
window.Clipboard = (function(window, document, navigator) {
  var textArea,
      copy;

  // 判斷是不是ios端
  function isOS() {
    return navigator.userAgent.match(/ipad|iphone/i);
  }
  //創(chuàng)建文本元素
  function createTextArea(text) {
    textArea = document.createElement('textArea');
    textArea.innerHTML = text;
    textArea.value = text;
    document.body.appendChild(textArea);
  }
  //選擇內(nèi)容
  function selectText() {
    var range,
        selection;

    if (isOS()) {
      range = document.createRange();
      range.selectNodeContents(textArea);
      selection = window.getSelection();
      selection.removeAllRanges();
      selection.addRange(range);
      textArea.setSelectionRange(0, 999999);
    } else {
      textArea.select();
    }
  }

//復(fù)制到剪貼板
  function copyToClipboard() {        
    try{
      if(document.execCommand("Copy")){
        alert("復(fù)制成功薪者!");  
      }else{
        alert("復(fù)制失斪菘痢!請手動復(fù)制言津!");
      }
    }catch(err){
      alert("復(fù)制錯誤攻人!請手動復(fù)制!")
    }
    document.body.removeChild(textArea);
  }

  copy = function(text) {
    createTextArea(text);
    selectText();
    copyToClipboard();
  };

  return {
    copy: copy
  };
})(window, document, navigator);

使用函數(shù)

//使用函數(shù)
$("#copy").on("tap",function(){
  var  val = $("#textAreas").val();
  Clipboard.copy(val);
});

這樣就實現(xiàn)了前端點擊按鈕自動復(fù)制剪貼板的功能悬槽。
version1.0 —— 2018/5/6怀吻,首次創(chuàng)建實現(xiàn)前端點擊按鈕自動復(fù)制剪貼板功能
?burning_韻七七

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市初婆,隨后出現(xiàn)的幾起案子蓬坡,更是在濱河造成了極大的恐慌,老刑警劉巖烟逊,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣窜,死亡現(xiàn)場離奇詭異铺根,居然都是意外死亡宪躯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門位迂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來访雪,“玉大人详瑞,你說我怎么就攤上這事〕甲海” “怎么了坝橡?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長精置。 經(jīng)常有香客問我计寇,道長,這世上最難降的妖魔是什么脂倦? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任番宁,我火速辦了婚禮,結(jié)果婚禮上赖阻,老公的妹妹穿的比我還像新娘蝶押。我一直安慰自己,他們只是感情好火欧,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布棋电。 她就那樣靜靜地躺著,像睡著了一般苇侵。 火紅的嫁衣襯著肌膚如雪赶盔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天衅檀,我揣著相機與錄音招刨,去河邊找鬼。 笑死哀军,一個胖子當著我的面吹牛沉眶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杉适,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谎倔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了猿推?” 一聲冷哼從身側(cè)響起片习,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹬叭,沒想到半個月后藕咏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡秽五,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年孽查,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坦喘。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盲再,死狀恐怖西设,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情答朋,我是刑警寧澤贷揽,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站梦碗,受9級特大地震影響禽绪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洪规,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一丐一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淹冰,春花似錦库车、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晶乔,卻和暖如春珍坊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背正罢。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工阵漏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翻具。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓履怯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裆泳。 傳聞我的和親對象是個殘疾皇子叹洲,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容