為網站代碼塊pre標簽增加一個復制代碼按鈕代碼
參考其他比較專業的博客系統,都在代碼塊上有一個復制代碼的按鈕。用來快速復制整個代碼塊的代碼。於是我也想給我的博客增加一個這個功能。
註: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); }
這裡在gitee上做瞭一個簡單的demo。demo示例:
在線測試:http://demo.jb51.net/js/2021/code_copy/
到此這篇關於為網站代碼塊pre標簽增加一個復制代碼按鈕代碼的文章就介紹到這瞭,更多相關代碼高亮增加復制代碼功能內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Vue自定義復制指令 v-copy功能的實現
- 代碼塊高亮可復制顯示js插件highlight.js+clipboard.js整合
- Vue3.0寫自定義指令的簡單步驟記錄
- 使用clipboard.js庫實現復制剪切功能
- clipboard.js使用總結