• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > H5 的复制操作实例代码

H5 的复制操作实例代码

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含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('text/plain', msg);
            e.preventDefault();
        })
    // 执行 copy 命令
    document.execCommand('copy');
    // 移除绑定事件
    document.removeEventListener('copy','copy');
}

cut && paste 相关

前面看起来也挺简单的。当然,有同学会想,不是还有其他事件比如 cut, paste 吗?是不是也可以这么做呢?
额...
一开始,我也是这么想的,但现实往往会给您一个轻轻的爱抚。因为,为了防止你恶意的获取用户信息,在 Chrome 中,一般而言你是不能通过 document.execCommand('paste') 触发 paste 事件。不过,在手机端中,规矩是,你可以在可编辑的元素中触发 cut 和 paste , 只能在有效的 选中 元素中,触发 copy。

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

document.addEventListener('paste',function copy (e) {            e.preventDefault();        });
当然,还有更狠的,直接禁止 copy,paste,cut 事件。
['cut', 'copy', 'paste'].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 的复制操作实例代码的详细内容,更多请关注微课江湖其它相关文章!

您可能想查找下面的文章:

  • H5实现Tab标签切换效果
  • 分享h5 canvas圆圈进度条的实例代码
  • H5 canvas实现圆形动态加载进度实例
  • H5 的复制操作实例代码
  • H5项目开发iOS插件功能的实例代码
  • h5输入框提示语 + 正常文本框提示语的实现方法
  • 手机端H5 header定义样式

相关文章

  • 2018-12-03html5 css3实例教程 一款html5和css3实现的小机器人走路动画_html5教程技巧
  • 2018-12-03为什么人人网把 iOS 客户端从原生写成 HTML5,Facebook 却将半 HTML5 重写成原生?
  • 2017-08-06html5跨域通讯之postMessage的用法总结
  • 2018-12-03HTML5/CSS3专题 CSS3打造百度贴吧的3D翻牌效果的经典案例
  • 2018-12-03H5的canvas实现贪吃蛇小游戏
  • 2018-12-03HTML5新特性之文件和二进制数据的操作
  • 2018-12-03HTML5每日一练之details展开收缩标签的应用
  • 2018-12-03详细介绍HTML5简易在线画图工具的实现案例
  • 2018-12-03HTML5中indexedDB 数据库的相关介绍
  • 2017-08-06html5 CSS过度-webkit-transition使用介绍

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 使用HTML5 Canvas API中的clip()方法裁剪区域图像
    • 关于游戏开发的6篇文章推荐
    • 基于HTML5 audio元素播放声音jQuery小插件_html5教程技巧
    • h5中main元素的实例详解
    • HTML5梦幻之旅——炫丽的流星雨效果实现过程_html5教程技巧
    • span设为inline-block之后,为什么未包含文字时下面会多出一条空白?
    • 如何通过html和css完成下拉菜单的制作?
    • 有关HTML5开发的文章推荐10篇
    • HTML5-Web存储如何使用?
    • 移动web模拟客户端实现多方框输入密码效果【附代码】

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有