搜尋
首頁web前端H5教程H5 的複製操作實例程式碼

一開始,在 Web 端,並沒有任何可以接觸到 clipborad 的內容。以前,我們想要執行 copy/paste/cut 只能藉助 flash。但現在,偉大的 H5 又或者說 W3C 推出了關於 H5 操控 clipboard 的草案。最出名的就是兩個 API:

document.execCommand()
ClipboardEvent

我們一步一步來了解一下。先來看一下經典 execCommand 的使用。

複製操作

input 複製

我們需要先了解一下,基本的複製過程:

選取(select)

複製(command + c || ctrl + c)

execCommand 也是遵循這個過程來實現這樣的效果。如果我們想使用 execCommand 執行 copy 的話,那麼應該先選取你想複製的元素。
這裡,另外還會使用到一個新的 API, window.getSelection()。具體來說就是:

getSelection(): 用來取得目前選取的元素的內容。一般而言就是用滑鼠選取頁面上的內容。

toString(): 用來將選取的內容直接變成 text 文字。

基本使用就是:

// 輸出選取的文字

window.getSelection().toString();

我們一般只是使用該 API 進行輔助作用。最常見的做法就是動態建立 input 元素,然後動態制定 input[value]。執行 select(), 進行選中,然後執行 copy 即可。

# 總的程式碼就是

function copyContent(elementId) {
  // 动态创建 input 元素
  var aux = document.createElement("input");
  // 获得需要复制的内容
  aux.
set
Attribute("value", document.getElementById(elementId).innerHTML);
  // 添加到 DOM 元素中
  document.body.app
end
Child(aux);
  // 执行选中
  // 注意: 只有 input 和 textarea 可以执行 select() 方法.
  aux.select();
  
  // 获得选中的内容
    var content = window.getSelection().toString();
    
  // 执行复制命令
  document.execCommand("copy");
  // 将 input 元素移除
  document.body.removeChild(aux);
}

看個實例

#任意複製

#當然,如果你想不動態加入input 元素,想直接copy 的指定DOM 元素的話,該怎麼做呢?這裡就需要使用到 HTML5 新提供的 createRange() 相關方法。當然,上面的 getSelection() 也是其中之一。用到的 API 有:

document.createRange(): 用來建立選取容器。傳回一個 range Object。 該 API 的兼容性,也是挺好的,手機端和 PC 端都支援。

selectNode(DOM): 傳回 range Object 上掛載的方法。用來新增選取元素。只能加入一個

window.getSelection()

addRange(range): 這個方法是掛載到 getSelection() 方法下的,用來執行元素的選取。 (!很重要)

上面API 就這麼一些:

直接看demo 吧

這裡,我貼一下關鍵程式碼:

  var copyDOM = document.querySelector('#selector');  
  var range = document.createRange();  
  // 选中需要复制的节点
  range.selectNode(copyDOM);
  // 执行选中元素
  window.getSelection().addRange(range);
  // 执行 copy 操作
var successful = document.execCommand('copy');  
  try {  
    var msg = successful ? 'successful' : 'unsuccessful';  
    console.log('copy is' + msg);  
  } catch(err) {  
    console.log('Oops, unable to copy');  
  }
// 移除选中的元素
  window.getSelection().remove
All
Ranges();

這裡需要額外提醒一下,不能自動執行上述copy 操作。即,在沒有任何使用者互動操作下,是不能執行 copy 等交互行為的。所以,這裡需要用到 click 事件來輔助(當然,你也可以用其他事件來進行代替)。

使用 clipboard 複製

首先, clipboard 是最近提出來的,所以它的兼容性還是需要等待時間去驗證的,目前的兼容性是支持一些簡單的 event。
如果,你的瀏覽器支援 ClipboardEvent Constructor 的話。那麼 複製操作就變得異常簡單。

// 當然,下面的程式碼應該放在某個互動的 click 事件中。

var copyEvent = 
new
 ClipboardEvent('copy', {
            dataType: 'text/plain',
            data: 'My string'
        });
        document.dispatchEvent(copyEvent);

如果沒有的話,就只能使用在 document 的 copy 事件中傳回的 event.clipboardData API 來設定或取得相關的資訊。我們得到clipboardData 物件只能透過事件回呼來實現:

e.clipboardData: 只能透過document 上的copy/paste/cut 事件來取得

document.addEvent
List
ener('copy', function(e){
    // 设置信息,实现复制
    e.clipboardData.setData('text/plain', 'Hello, world!');
    e.
prev
entDefault(); 
});

clipboardData : 該obj 也掛載兩個常用的API

format: 就是基本的MIME type。最常用的就是 text/plain。具體內容可以參考MIME references

data: 就是對應MIME type 放入的具體資料內容

setData(format, data): 設定相關的資料訊息,主要用於copy 和cut 的相關事件中。

getData(format): 一般用於 paste 事件。用來取得 clipboard 裡面的內容。不過,需要製定正確的解碼格式(就是設定好正確的 MIME type)。並且,該方法只能在 paste 事件中使用。

上面感覺就是簡單的介紹一下 API,接下來正式說一些乾貨。如果使用 clipboardData 實作自訂複製內容。這樣,你不僅可以複製頁面上簡單的 text 文本,還可以複製圖片訊息等。

看程式碼

// 在指定DOM 上綁定互動事件

DOM.addEventListener('click',function(){},false){
    // 添加 copy 内容
    document.addEventListener('copy',function copy (e) {
            msg = `<${msg}/>`;
            e.clipboardData.setData(&#39;text/plain&#39;, msg);
            e.preventDefault();
        })
    // 执行 copy 命令
    document.execCommand(&#39;copy&#39;);
    // 移除绑定事件
    document.removeEventListener(&#39;copy&#39;,&#39;copy&#39;);
}

cut && paste 相關

前面看起來也挺簡單的。當然,有同學會想,不是有其他事件例如 cut, paste 嗎?是不是也可以這麼做呢?
額...
一開始,我也是這麼想的,但現實往往會給您一個輕輕的愛撫。因為,為了防止你惡意的獲取用戶信息,在 Chrome 中,一般而言你是不能透過 document.execCommand('paste') 觸發 paste 事件。不過,在手機端中,規矩是,你可以在可編輯的元素中觸發 cut 和 paste , 只能在有效的 選中 元素中,觸發 copy。

根据上面的说法,我们可以通过利用 paste 的相关方法,来具体应用到实践中。比如,防止用户粘贴信息。这特别适用于那些做题页面,防止你查资料然后 copy 相关答案。

document.addEventListener(&#39;paste&#39;,function copy (e) {            e.preventDefault();        });
当然,还有更狠的,直接禁止 copy,paste,cut 事件。
[&#39;cut&#39;, &#39;copy&#39;, &#39;paste&#39;].forEach((event)=>{    document.addEventListener(event, (e)=>{        e.preventDefault();    });});

方案总结

HTML5 现在能完美提供给我们的应该就是 copy 事件的使用,对于市面上的 clipboard.js 差不多也是运用上述的知识点。根据上面的描述,可以了解到,想要实现复制功能有三种渐进退化方案。以下兼容性由高到低:

input 模式

createRange

clipboard 直接操作

现在 React 比较火,这里我简单的写了一个 copybtn 组件。具体的使用 README 已经写清楚了,如果有什么不懂的地方可以 @我。

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

3. php.cn原创html5视频教程

以上是H5 的複製操作實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
qq音乐歌词怎么复制 歌词复制的方法qq音乐歌词怎么复制 歌词复制的方法Mar 12, 2024 pm 08:22 PM

  我们用户们在使用这款平台的时候应该都能够了解到上面对于一些功能的多样性,我们知道一些歌曲的歌词都写的非常的不错。有时候甚至都会多听几遍,觉得其中的含义都是非常深刻的,所以我们想要去了解其中的胜意,就想要直接的复制下来当文案来使用,不过对于要使用的话,还是要学会如何去复制歌词才可以,这些操作方面我相信大家们应该都并不模式,但是在手机上面操作确实是有点难度,所以为了能够让大家们更好的了解的话,今日小编就来为你们好好的讲解上面的一些操作体验,如果你们也喜欢的话,就和小编一起来看看吧,不要错过了。 

复制的快捷键是什么复制的快捷键是什么Mar 10, 2023 pm 02:00 PM

复制的快捷键是“Ctrl+c”,与之相对应的粘贴键是“Ctrl+v”;在电脑中,使用鼠标拖拽选中文字,按住Ctrl,再点C键,即可完成复制;快捷键就是指通过某些特定的按键、按键顺序或按键组合来完成一个操作。

h5是指什么h5是指什么Aug 02, 2023 pm 01:52 PM

H5是指HTML5,是HTML的最新版本,H5是一个功能强大的标记语言,为开发者提供了更多的选择和创造空间,它的出现推动了Web技术的发展,使得网页的交互和效果更加出色,随着H5技术的逐渐成熟和普及,相信它将会在互联网的世界中发挥越来越重要的作用。

PS复制图层快捷键PS复制图层快捷键Feb 23, 2024 pm 02:34 PM

在PS复制图层快捷键中,我们可以知道使用PS的时候如果想要进行复制图层的操作,可以使用到快捷键【Ctrl+J】进行快速复制。这篇复制图层快捷键的介绍就能够告诉大家具体的操作方法,下面就是详细的内容,赶紧看看吧。PS复制图层快捷键答:【Ctrl+J】具体方法:1、在ps中打开图像,选中需要复制的图层。2、键盘同时按下【Ctrl+J】,即可完成对图层的复制。其他复制方式:1、打开图像后,按住图层,向下放【新建图层】图标移动。2、移动到该图标上后,松手。3、即可完成图层复制。

学习使用复制粘贴的快捷键学习使用复制粘贴的快捷键Jan 13, 2024 pm 12:27 PM

很多的用户们在使用电脑的时候,如果遇到一些需要复制粘贴的东西时,用鼠标复制非常麻烦,那么复制粘贴的快捷键需要如何使用呢,快来看看详细的教程吧~复制粘贴快捷键怎么用:1、复制键:Ctrl+C,选择需要复制的文字或图片,按下快捷键。2、粘贴键:Ctrl+V,在需要粘贴的位置上,直接按下快捷键就行了。

剪切和复制有什么区别剪切和复制有什么区别Mar 22, 2024 pm 03:58 PM

1、剪切指的是将选定的内容从一个位置移动到另一个位置的操作。2、复制操作是在选定的内容上创建一个副本,并将这个副本保存在系统的剪贴板中,且原内容会保留在原来的位置上。3、如果用户想把内容移动到其他位置并删除原来的位置上的内容,就可以使用剪切操作。4、如果用户需要创建内容的副本,且在不影响原内容的情况下将其粘贴到其他地方,那就要使用复制操作。

如何区分H5,WEB前端,大前端,WEB全栈?如何区分H5,WEB前端,大前端,WEB全栈?Aug 03, 2022 pm 04:00 PM

本文带你快速区分H5、WEB前端、大前端、WEB全栈,希望对需要的朋友有所帮助!

Vue 中如何实现拖拽元素的复制和移动?Vue 中如何实现拖拽元素的复制和移动?Jun 25, 2023 am 08:35 AM

Vue是一款流行的JavaScript框架,它提供了方便的拖拽功能,让我们可以轻易地实现元素的复制和移动。下面,我们就来看一下如何在Vue中实现拖拽元素的复制和移动。一、拖拽元素的基本实现在Vue中实现拖拽元素的复制和移动,首先需要实现元素的基本拖拽功能。具体实现方法如下:在模板中添加需要拖拽的元素:&lt;divclass=&quot;drag-elem

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中