写文章的时候,作为一名业余的码农,常常会在文章中粘贴一些代码。有的时候代码块比拟长,在前期应用中须要复制这段代码就比拟麻烦
参考其余比拟业余的博客零碎,都在代码块上有一个复制代码的按钮。用来疾速复制整个代码块的代码。于是我也想给我的博客减少一个这个性能。
注:chrome测试通过。其余浏览器未进行测试。
实现思路:
1、在页面加载实现之后,应用js给每个pre标签减少一个按钮“复制代码”
2、给按钮减少点击事件,点击事件的性能就是复制代码块的内容
实现代码:
css局部,btn-pre-copy是pre标签中应用js减少的“复制代码”按钮。css的作用是让他显示在pre标签的右上角。这里要留神pre标签和按钮中position属性
.content pre{
position: relative;
background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
}
pre .btn-pre-copy{
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-khtml-user-select: none;
user-select: none;
position: absolute;
top: 10px;
right: 12px;
font-size: 12px;
line-height: 1;
cursor: pointer;
color: hsla(0,0%,54.9%,.8);
transition: color .1s;
}
js局部,js局部次要是给pre标签减少按钮和实现拷贝局部,我这里拷贝局部的实现是先实例化一个长期的节点textarea,而后吧pre的内容设置进这个长期节点,而后选中内容进行复制,最初销毁这个节点。具体参考代码。js局部有依赖于jquery
$(function(){
//给每一串代码元素减少复制代码节点
let preList = $(".content pre");
for (let pre of preList) {
//给每个代码块减少上“复制代码”按钮
let btn = $("<span class=\"btn-pre-copy\" onclick='preCopy(this)'>复制代码</span>");
btn.prependTo(pre);
}
});
/**
* 执行复制代码操作
* @param obj
*/
function preCopy(obj) {
//执行复制
let btn = $(obj);
let pre = btn.parent();
//为了实现复制性能。新增一个长期的textarea节点。应用他来复制内容
let temp = $("<textarea></textarea>");
//防止复制内容时把按钮文字也复制进去。先长期置空
btn.text("");
temp.text(pre.text());
temp.appendTo(pre);
temp.select();
document.execCommand("Copy");
temp.remove();
//批改按钮名
btn.text("复制胜利");
//肯定工夫后吧按钮名改回来
setTimeout(()=> {
btn.text("复制代码");
},1500);
}
到此这篇对于为网站代码块pre标签减少一个复制代码按钮代码的文章就介绍到这了,更多相干代码高亮减少复制代码性能内容请搜寻segmentfault以前的文章或持续浏览上面的相干文章心愿大家当前多多反对segmentfault!
发表回复