这月工作比较繁忙,所以这篇文章出的晚了,本次先把我文章内的复制功能的实现代码贴出来,如果对其他功能还有需要的,请留言给我,我会整理出来分享给大家!好了,废话说完了 ,这就开始正题。
概要
- 应用第三方插件
clipboard.js - 使用JQuery操作显示位置
- 支持浏览器
- Chrome 42+
- Edge 12+
- Firefox 41+
- IE 9+
- Opera 29+
- Safari 10+
下载插件clipboard.js
clipboard.js(这里我不赘述了,直接贴主页/GitHub)
提供下载
保存文件clipboard.js / clipboard.min.js (推荐),目录如下:(相对目录为工程目录)
.\themes\next\source\lib\zclip\clipboard.min.js 新增
插入JavaScript
新建文件 custom.js ,目录如下:(相对目录为工程目录)
.\themes\next\source\js\src\custom.js 新增
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
//此函数用于创建复制按钮function createCopyBtns() {var $codeArea = $("figure table");//查看页面是否具有代码区域,没有代码块则不创建 复制按钮if ($codeArea.length > 0) {//复制成功后将要干的事情function changeToSuccess(item) {$imgOK = $("#copyBtn").find("#imgSuccess");if ($imgOK.css("display") == "none") {$imgOK.css({opacity: 0,display: "block"});$imgOK.animate({opacity: 1}, 1000);setTimeout(function() {$imgOK.animate({opacity: 0}, 2000);}, 2000);setTimeout(function() {$imgOK.css("display", "none");}, 4000);};};//创建 全局复制按钮,仅有一组。包含:复制按钮,复制成功响应按钮//值得注意的是:1.按钮默认隐藏,2.位置使用绝对位置 position: absolute; (position: fixed 也可以,需要修改代码)$(".post-body").before('<div id="copyBtn" style="opacity: 0; position: absolute;top:0px;display: none;line-height: 1; font-size:1.5em"><span id="imgCopy" ><i class="fa fa-paste fa-fw"></i></span><span id="imgSuccess" style="display: none;"><i class="fa fa-check-circle fa-fw" aria-hidden="true"></i></span>');//创建 复制 插件,绑定单机时间到 指定元素,支持JQueryvar clipboard = new Clipboard('#copyBtn', {target: function() {//返回需要复制的元素内容return document.querySelector("[copyFlag]");},isSupported: function() {//支持复制内容return document.querySelector("[copyFlag]");}});//复制成功事件绑定clipboard.on('success',function(e) {//清除内容被选择状态e.clearSelection();changeToSuccess(e);});//复制失败绑定事件clipboard.on('error',function(e) {console.error('Action:', e.action);console.error('Trigger:', e.trigger);});//鼠标 在复制按钮上滑动和离开后渐变显示/隐藏效果$("#copyBtn").hover(function() {$(this).stop();$(this).css("opacity", 1);},function() {$(this).animate({opacity: 0}, 2000);});}}//感应鼠标是否在代码区$("figure").hover(function() {//-------鼠标活动在代码块内//移除之前含有复制标志代码块的 copyFlag$("[copyFlag]").removeAttr("copyFlag");//在新的(当前鼠标所在代码区)代码块插入标志:copyFlag$(this).find(".code").attr("copyFlag", 1);//获取复制按钮$copyBtn = $("#copyBtn");if ($copyBtn.lenght != 0) {//获取到按钮的前提下进行一下操作//停止按钮动画效果//设置为 显示状态//修改 复制按钮 位置到 当前代码块开始部位//设置代码块 左侧位置$copyBtn.stop();$copyBtn.css("opacity", 0.8);$copyBtn.css("display", "block");$copyBtn.css("top", parseInt($copyBtn.css("top")) + $(this).offset().top - $copyBtn.offset().top + 3);$copyBtn.css("left", -$copyBtn.width() - 3);}},function() {//-------鼠标离开代码块//设置复制按钮可见度 2秒内到 0$("#copyBtn").animate({opacity: 0}, 2000);});//页面载入完成后,创建复制按钮$(document).ready(function() {createCopyBtns();});
插入主题中
新建文件 custom.swig ,目录如下:(相对目录为工程目录)
.\themes\next\layout_custom\custom.swig 新增
12
<script type="text/javascript" src="/lib/zclip/clipboard.min.js"></script><script type="text/javascript" src="/js/src/custom.js"></script>
修改文件 _layout.swig ,目录如下:(相对目录为工程目录)
.\themes\next\layout_layout.swig 修改
1234567891011121314151617
...<html class="{{ html_class | lower }}" lang="{{ config.language }}"><head>...</head><body itemscope itemtype="http://schema.org/WebPage" lang="{{ page.lang || page.language || config.language }}">......{% include '_third-party/mathjax.swig' %}{% include '_third-party/scroll-cookie.swig' %}{% include '_third-party/exturl.swig' %}{% include '_custom/custom.swig' %}</body></html>
向文件中</body>前一行插入文件引用,如第15行效果。
{% include '_custom/custom.swig' %}
总结
至此,代码复制 功能添加完毕,所有文件添加及修改状态如下
.\themes\next\source\lib\zclip\clipboard.min.js 新增
.\themes\next\source\js\src\custom.js 新增
.\themes\next\layout\_custom\custom.swig 新增 (感谢@heliuphy发现问题!).\themes\next\layout_layout.swig 修改
运行起来看看效果吧!
注意点
- 相对目录都以 工程目录 为 根目录
- 本文内容使用 jQuery v2.1.3
- HEXO主题 NexT
- 图标库 Font Awesome (NexT主题内嵌)

