纯JS实现复制功能的三种方式,有踩坑

浅殇忆流年 2020-05-28 11:25:31 ⋅ 618 阅读

简介

业余时间写了一个在WX里面分享X宝优惠券的小工具,里面有用到复制T口令的功能,当时以为实现起来很......简单,但是一不留神还是踩了一些坑,接下来就给大家分享一下。

页面布局代码传送门:纯HTML实现某宝优惠券、商品列表和活动悬浮等布局

第一种:浏览器Copy功能

HTML代码

<textarea cols="20" rows="10" id="tkl">
素乐小风扇usb便携式手持小型随身可充电学生宿舍女桌面办公室桌上手拿握迷你电小米大风力超静音n9儿童电扇
【在售价】48
【券后价】38.00
【返红包】0.33
--------------------
【领券下单】复制¥1ikI1q4OnJk¥打开手机淘宝领券并下单</textarea>
<input type="button" onClick="copyTkl()" value="立即领券" />

JS代码

<script type="text/javascript">
function copyTkl() {
var tkl=document.getElementById("tkl");
tkl.select();
document.execCommand("Copy");
alert("复制淘口令成功......");
}
</script>

原理:

  • 获取textarea文本域数据

  • 选中复制对象

  • 执行浏览器复制命令

在微信开发工具里面一切正常,但是在真机使用时iphone 有些机型不能复制到数据。现象之一:iphone X第一次打开页面复制正常,但是同一个页面第二次及以后就不能再复制到数据。

第二种:clipboard.js

下载地址:
https://github.com/zenorocha/clipboard.js/archive/master.zip

HTML代码

 <input type="text" id="tkl" />
<button type="button" id="copyTkl">立即领券</button>

JS代码

<!--引入插件-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
<script type="text/javascript">
$('#copy').on('click', function () {
var value = $('#copyTkl').val();
$('#copyTkl').attr('data-clipboard-text', value);
var clipboard = new Clipboard('#copyTkl');
clipboard.on('success', function (e) {
alert("复制淘口令成功......");
});
clipboard.on('error', function (e) {
alert("复制淘口令失败......");
});
})
</script>

参数说明

浏览器支持

  • Chrome 42 +

  • Edge12 +

  • Firefox 41 +

  • IE 9 +

  • Opera 29 +

  • Safari 10 +

使用总结:PC上基本可以畅通无阻,移动端要改源码,在实现过程中还解决了一系列问题,例如:动态数据复制、div换button 、和项目中本身代码的禁用事件冲突等,并且还要做机型适配。

第三种:纯JS,对第一种进行改进

网上有很多的例子,总结起来就两种:1、clipboard.js 2、纯JS 经过取舍clipboard.js放弃,因为不确定因素太多。那么就修改第一种方法的实现。

JS代码

function copyTkl() {
const range = document.createRange();
range.selectNode(document.getElementById('tkl'));
const selection = window.getSelection();
if (selection.rangeCount > 0) selection.removeAllRanges();
selection.addRange(range);
document.execCommand('copy');
alert("复制淘口令成功......");
}

经测试,目前还没有发现问题,有兴趣的可以尝试一下!

也可以公众号搜索“极好券”查看实际效果哦~~~


全部评论: 0

    我有话说:

    8 SQL 错误用法,你

    编写复杂SQL语句要养成使用 WITH 语句习惯。简洁且思路清晰SQL语句也能减小数据库负担 。

    Linux 下安装 Elasticsearch5.6.x 详细步骤以及解决方案

    网上各种ES版本安装步骤和问题解决方案,但是在安装过程中还是遇到了许多问题,那么今天来整理一份详细安装过程以及碰到问题和心得;什么不对和问题希望大家留言一起讨论。

    【SpringCloud实战】一次开发中使用Feign添加动态Header问题思考

    了一个Spring Cloud Feign添加自定义Header,分享给大家

    采集Nginx日志方式

    来源 | https://dwz.cn/ofiCxRK0 由于nginx功能强大,性能突出,越来越多web应用采用nginx作为http和反向代理web服务器。而nginx访问日志不管是做

    HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末源码)

    最近温习一下HTML5+CSS3一些特性,准备找个高仿目标,最后选择了某宝粉丝福利页面

    为什么要使用 Node.js?这几点你必须知道!

    经过这几年发展,前端普遍进入了技术深水区,只会Web页面开发已经难以满足企业需求,Node逐渐成为了刚性技能。 但Node在业务上使用还没有那么普及,有的时候想用老板还不同意,本文将从4个角度

    架构实战篇(十一):Spring Boot 集成企业级搜索引擎 SolrCloud

    Solr是以Lucene为基础实现文本检索应用服务。Solr部署方式单机方式、多机Master-Slaver方式、Cloud方式

    微服务架构学习笔记(一):重新认识微服务

    微服务(Microservice)是服务化思路最佳实践方向,遵循SOA思路,各个企业在服务化治理道路上走时间长了,多了,整个软件交付链路上各个环节基础设施逐渐成熟了,微服务

    Spring Boot 解决跨域问题 3 方案

    或百度一下,能搜出一大片解决方案,那么为啥又要写...

    「转载」Redis 到底是怎么实现“附近人”这个功能

    Redis,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高运行效率。

    JavaScript作业队列和微任务

    JavaScript作业队列和微任务 当Promises在ES6中首次引入时,它们使编写异步代码工作变得更加容易。回调地狱被更简单构造所取代,该构造使开发人员可以更轻松地处理异步任务。理解诺言

    从单体迈向Serverless指南

    云原生应用个非常关键要素:微服务架构,应用容器化和Serverless化,敏捷软件交付流程。

    微信小程序-template使用:实现购物车商品数量加减功能

    上一篇我们实现了购物车功能,里面用到template模板功能实现购物车商品数量加减和价格计算功能......

    京东技术:APPUI自动化测试框架及平台化探索

    UI自动化测试,即通过模拟手动操作用户UI界面方式,以代码方式实现自动操作和验证自动化测试手段。

    Google技术:你不了解Google最新发布JS代码规范 最佳实践

    Google为了那些还不熟悉代码规范人发布了一个JS代码规范。其中列出了编写简洁易懂代码所应该做最佳实践

    Fes.js v0.4.1 版本发布,一套优秀中后台系统前端解决方案

    Fes.js 是一套优秀中后台前端解决方案。提供初始项目、开发调试、Mock接口、编译打包命令行工具。内置布局、权限、数据字典、状态管理、存储、Api等多个模块。以约定、配置化、组件化设计思想

    前端实战篇:通过JS抓取城市所有站点与线路

    做公交线路定位,木数据怎么办?网上抓去~ 手把手教你通过JS实现站点线路数据抓取