|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
JS有一个内置指令,navigator.clipboard.writeText(text),可以将指定文本复制到系统的剪切板。navigator 原意之一是浏览器,在JS里是一个独立的与浏览器有关的对象,clipboard 是剪切板,writetext,写入文本,text参数就是待写入的文本对象。
例如我们要将 id="mytext" 的 div 元素的文本内容写入剪切板:
mytext.onclick = () => navigator.clipboard.writeText(mytext.innerText);
还是比较简单的。但有一个问题:现代浏览器引入了很多安全机制,其中之一是,http: 开头的域名被视为不安全,https: 开头的域名才是安全的。故而,在 http: 域名的站点,上面的复制指定文本到剪切板的做法会报错,复制失败。
一般来说,企图绕过安全机制实现正常复制的想法是徒然的,即便可以,消耗也是巨大的,所以解决问题的思路,比较干脆的是,换一种方式:将文本置于 text 类别的元素,如 input type=“text” 或 textArea 都可以(textArea可以支持更大文本的复制),然后使用 execCommand 指令对选中文本进行copy。我们以 input 为例,可以在JS中动态生成,也可以用 HTML 创建(本帖所举栗子使用此法),设置其不可见:
<input id="icopy" type="text" value="" style="position: absolute; opacity: 0;" />
之所以设置绝对定位,是想令其不影响自然文档流中其他元素的正常占位,opacity设置为0,完全透明,不可见。它有一个 id,这是我们操作它的依据。我们写一个复制函数,以便能反复调用:
//复制指定元素的文本内容
// ele 参数是要复制其上文本的元素
function copyText(ele) {
icopy.value = ele.innerText; //将元素的文本传递给 icopy文本框
icopy.select(); //文本框全选
document.execCommand('copy'); //执行 execCommand 指令,执行参数是 copy(复制)
icopy.value = '复制成功'; // icopy文本框的内容转为提示语
icopy.blur(); //不让文本框有焦点(不然提示语出现会出现输入光标)
icopy.style.opacity = '1'; //icopy文本框变为可见
icopy.style.left = ele.offsetLeft + 40 + 'px'; //设置文本框left位置:参照被复制内容的对象元素的left值
icopy.style.top = ele.offsetTop + 'px'; //设置文本框top位置:参照被复制内容的对象元素的top值
setTimeout('icopy.style.opacity = "0"', 1000); //设定定时器,令文本框一秒钟后消失
}
然后,给指定元素(例如前面提到的 id="mytext" 的 div)一个单击事件,调用上面的函数:
mytext.onclick = () => copyText(mytext);
效果请到下面的链接查看:
HSL色盘配置工具 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! (huachaowang.com)
|
评分
-
| 参与人数 2 | 威望 +60 |
金钱 +120 |
经验 +60 |
收起
理由
|
小鱼儿
| + 10 |
+ 20 |
+ 10 |
赞一个! |
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|