Jаvascript
为代码块添加一个"复制代码"按钮,并实现点击按钮后将代码块的内容复制到剪贴板中。
document.querySelectorAll('pre')
获取所有<pre>
元素(即代码块)。forEach
方法遍历每个代码块。copyButton
,设置其class为"copy",并将显示文本设置为"复制代码"。container
,设置其class为"code-container",并将复制按钮添加到容器元素内。<textarea>
元素,并将代码块的内容设置为其值。<textarea>
元素追加到 <body>
中。<textarea>
中的文本。<textarea>
元素。这段代码的作用是为网页中的代码块添加一个复制按钮,方便复制代码片段。
var codeBlocks = document.querySelectorAll('pre');
codeBlocks.forEach(function(codeBlock) {
var copyButton = document.createElement('text');
copyButton.className = 'copy';
copyButton.textContent = '复制代码';
// 创建包裹代码块和按钮的容器元素
var container = document.createElement('div');
container.className = 'code-container';
// 将按钮添加到容器元素内
container.appendChild(copyButton);
// 将容器元素插入到代码块之前
codeBlock.parentNode.insertBefore(container, codeBlock);
// 设置容器元素样式,使其定位为相对定位(position: relative)
container.style.position = 'relative';
// 设置复制按钮样式,使其绝对定位于容器元素的右上角
copyButton.style.position = 'absolute';
copyButton.style.top = '8px';
copyButton.style.right = '10px';
copyButton.addEventListener('click', function() {
// 获取代码块的文本内容
var code = codeBlock.textContent;
// 创建一个临时的textarea元素,并将代码块的内容设置为其值
var textarea = document.createElement('textarea');
textarea.value = code;
// 将textarea元素追加到body中
document.body.appendChild(textarea);
// 选中textarea中的文本
textarea.select();
// 执行复制操作
document.execCommand('copy');
// 移除临时的textarea元素
document.body.removeChild(textarea);
// 修改复制按钮文本为“已复制”
this.textContent = '复制成功';
});
});
CSS
用于设置复制按钮和代码块的样式。具体样式如下:
.code-wrapper
类选择器用于设置包裹代码块的容器元素的样式。在这里设置了相对定位(position: relative)。
.code-block
类选择器用于设置代码块的样式。在这里设置了相对定位(position: relative)。
.copy
类选择器用于设置复制按钮的样式。具体样式如下:
font-size
:设置字体大小为 13px。transition
:设置颜色变化的过渡效果为 0.1秒。color
:设置按钮的颜色为带透明度的灰色(hsla(0, 0%, 54.9%, 0.8))。border
:去掉按钮的边框。border-radius
:设置按钮的圆角为4px。cursor
:设置鼠标悬停在按钮上时的样式为指针。z-index
:将复制按钮的层级置于顶层,确保按钮显示在其他内容之上。这些样式可以使用在前面提到的 jаvascript 脚本中的相关元素上,以实现更好的外观和交互效果。
.code-wrapper {
position: relative;
}
.code-block {
position: relative;
}
.copy {
font-size: 13px;
transition: color 0.1s;
color: hsla(0, 0%, 54.9%, 0.8);
border: none;
border-radius: 4px;
cursor: pointer;
z-index: 1;
}
主页</body>
之前插入js、css
<!--Copy code-->
<link href="{THEME}/js/copy/copy.css" rel="stylesheet"/>
<script src="{THEME}/js/copy/copy.js"></script>
<!--/Copy code-->