Rumah hujung hadapan web Tutorial H5 H5 的复制操作实例代码

H5 的复制操作实例代码

May 12, 2017 pm 12:02 PM

一开始,在 Web 端,并没有任何可以接触到 clipborad 的内容。以前,我们想要执行 copy/paste/cut 只能借助 flash。但现在,伟大的 H5 又或者说 W3C 推出了关于 H5 操控 clipboard 的草案。最出名的就是两个 API:

document.execCommand()
ClipboardEvent
Salin selepas log masuk

我们一步一步来了解一下。先来看一下经典 execCommand 的使用。

复制操作

input 复制

我们需要先了解一下,基本的复制过程:

选中(select)

复制(command + c || ctrl + c)

execCommand 也是遵循这一过程来实现这样的效果。如果我们想使用 execCommand 执行 copy 的话,那么应该先选中你想复制的元素。
这里,另外还会使用到一个新的 API, window.getSelection()。具体来说就是:

getSelection(): 用来获得当前选中的元素的内容。一般而言就是用鼠标选中页面上的内容。

toString(): 用来将选中的内容直接变为 text 文本。

基本使用就是:

// 输出选中的文本

window.getSelection().toString();
Salin selepas log masuk

我们一般只是使用该 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);
}
Salin selepas log masuk

看个实例

任意复制

当然,如果你想不动态添加 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();
Salin selepas log masuk

这里需要额外提醒一下,不能自动执行上述 copy 操作。即,在没有任何用户交互操作下,是不能执行 copy 等交互行为的。所以,这里需要用到 click 事件来辅助(当然,你也可以使用其他事件来进行代替)。

使用 clipboard 复制

首先, clipboard 是最近提出来的,所以它的兼容性还是需要等待时间去验证的,目前的兼容性是支持一些简单的 event。
如果,你的浏览器支持 ClipboardEvent Constructor 的话。那么 复制操作就变得异常简单。

// 当然,下面的代码应该放在某个交互的 click 事件中。

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

如果没有的话,就只能使用在 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(); 
});
Salin selepas log masuk

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;);
}
Salin selepas log masuk

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();    });});
Salin selepas log masuk

方案总结

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

input 模式

createRange

clipboard 直接操作

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

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

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

Atas ialah kandungan terperinci H5 的复制操作实例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyalin lirik dari QQ Music Bagaimana untuk menyalin lirik Bagaimana untuk menyalin lirik dari QQ Music Bagaimana untuk menyalin lirik Mar 12, 2024 pm 08:22 PM

Kami pengguna seharusnya dapat memahami kepelbagaian beberapa fungsi apabila menggunakan platform ini Kami tahu bahawa lirik beberapa lagu ditulis dengan sangat baik. Kadang-kadang kita mendengarnya beberapa kali dan merasakan maknanya sangat mendalam, jadi jika kita ingin memahami maksudnya, kita ingin menyalinnya secara langsung dan menggunakannya sebagai copywriting masih perlu Anda hanya perlu belajar bagaimana untuk menyalin lirik Saya percaya bahawa semua orang sudah biasa dengan operasi ini, tetapi ia memang agak sukar untuk beroperasi pada telefon bimbit Jadi untuk memberi anda pemahaman yang lebih baik, hari ini editor ada di sini untuk membantu anda. Penjelasan yang baik tentang beberapa pengalaman operasi di atas. ,

Contoh SVM dalam Python Contoh SVM dalam Python Jun 11, 2023 pm 08:42 PM

Mesin Vektor Sokongan (SVM) dalam Python ialah algoritma pembelajaran diselia yang berkuasa yang boleh digunakan untuk menyelesaikan masalah klasifikasi dan regresi. SVM berprestasi baik apabila menangani data berdimensi tinggi dan masalah bukan linear, dan digunakan secara meluas dalam perlombongan data, klasifikasi imej, klasifikasi teks, bioinformatik dan bidang lain. Dalam artikel ini, kami akan memperkenalkan contoh penggunaan SVM untuk pengelasan dalam Python. Kami akan menggunakan model SVM daripada perpustakaan scikit-learn

Apakah maksud h5? Apakah maksud h5? Aug 02, 2023 pm 01:52 PM

H5 merujuk kepada HTML5, versi terkini HTML H5 ialah bahasa penanda yang berkuasa yang menyediakan pembangun dengan lebih banyak pilihan dan ruang kreatif Kemunculannya menggalakkan pembangunan teknologi Web dan menjadikan interaksi dan kesan halaman web lebih Cemerlang, sebagai teknologi H5. secara beransur-ansur matang dan menjadi popular, saya percaya ia akan memainkan peranan yang semakin penting dalam dunia Internet.

Kekunci pintasan lapisan salinan PS Kekunci pintasan lapisan salinan PS Feb 23, 2024 pm 02:34 PM

Dalam kekunci pintasan lapisan salin PS, kita boleh tahu bahawa jika anda ingin menyalin lapisan apabila menggunakan PS, anda boleh menggunakan kekunci pintasan [Ctrl+J] untuk menyalin pantas. Pengenalan kepada kekunci pintasan untuk menyalin lapisan ini boleh memberitahu anda kaedah operasi khusus Berikut ialah kandungan terperinci, jadi sila lihat. Jawapan kekunci pintasan lapisan salin PS: [Ctrl+J] Kaedah khusus: 1. Buka imej dalam PS dan pilih lapisan yang perlu disalin. 2. Tekan [Ctrl+J] pada papan kekunci pada masa yang sama untuk melengkapkan salinan lapisan. Kaedah penyalinan lain: 1. Selepas membuka imej, tahan lapisan dan gerakkan ikon [Lapisan Baharu] ke bawah. 2. Selepas beralih ke ikon, lepaskan. 3. Salinan lapisan selesai.

Belajar menggunakan pintasan salin-tampal Belajar menggunakan pintasan salin-tampal Jan 13, 2024 pm 12:27 PM

Apabila ramai pengguna menggunakan komputer, jika mereka menghadapi sesuatu yang perlu disalin dan ditampal, sangat menyusahkan untuk menyalin dengan tetikus Jadi bagaimana untuk menggunakan kekunci pintasan untuk salin dan tampal Salin dan Tampal Pintasan Cara menggunakan kekunci: 1. Kekunci salin: Ctrl+C, pilih teks atau imej untuk disalin dan tekan kekunci pintasan. 2. Kekunci tampal: Ctrl+V Hanya tekan terus kekunci pintasan di mana anda mahu tampal.

Apakah yang perlu saya tambahkan pada kekunci pintasan salin ctrl? Apakah yang perlu saya tambahkan pada kekunci pintasan salin ctrl? Mar 15, 2024 am 09:57 AM

Dalam sistem Windows, kekunci pintasan untuk menyalin ialah Ctrl+C dalam sistem Apple, kekunci pintasan untuk menyalin ialah Command+C dalam sistem Linux, kekunci pintasan untuk menyalin ialah Ctrl+Shift+C; Mengetahui kekunci pintasan ini boleh meningkatkan kecekapan kerja pengguna dan memudahkan operasi penyalinan teks atau fail.

Bagaimana untuk menyalin jadual dalam Excel dan mengekalkan format asal? Bagaimana untuk menyalin jadual dalam Excel dan mengekalkan format asal? Mar 21, 2024 am 10:26 AM

Kami sering menggunakan Excel untuk memproses berbilang data jadual Selepas menyalin dan menampal jadual yang ditetapkan, format asal kembali kepada lalai, dan kami perlu menetapkannya semula. Malah, terdapat cara untuk menyalin jadual dalam Excel dan mengekalkan format asal Editor akan menerangkan kaedah khusus di bawah. 1. Langkah operasi menyeret dan menyalin kekunci Ctrl: Gunakan kekunci pintasan [Ctrl+A] untuk memilih semua kandungan jadual, dan kemudian gerakkan kursor tetikus ke tepi jadual sehingga kursor bergerak muncul. Tekan dan tahan kekunci [Ctrl], dan kemudian seret jadual ke kedudukan yang dikehendaki untuk melengkapkan pergerakan. Perlu diingatkan bahawa kaedah ini hanya berfungsi pada satu lembaran kerja dan tidak boleh dialihkan antara lembaran kerja yang berbeza. 2. Langkah-langkah untuk menampal terpilih: Tekan kekunci pintasan [Ctrl+A] untuk memilih semua jadual, dan tekan

Bagaimana untuk menyalin dan mengalihkan elemen drag-and-drop dalam Vue? Bagaimana untuk menyalin dan mengalihkan elemen drag-and-drop dalam Vue? Jun 25, 2023 am 08:35 AM

Vue ialah rangka kerja JavaScript popular yang menyediakan fungsi seret dan lepas yang mudah, membolehkan kami menyalin dan memindahkan elemen dengan mudah. Seterusnya, mari kita lihat cara menyalin dan mengalihkan elemen seret dan lepas dalam Vue. 1. Pelaksanaan asas elemen drag-and-drop Untuk menyalin dan mengalihkan elemen drag-and-drop dalam Vue, anda perlu melaksanakan fungsi drag-and-drop asas elemen tersebut terlebih dahulu. Kaedah pelaksanaan khusus adalah seperti berikut: Tambah elemen yang perlu diseret dalam templat: &lt;divclass="drag-elem"

See all articles