Hexo high一下小功能

額外一點(diǎn)小功能可以為博客增光添彩缨该。

一、引言

博客建立之初蛤袒,有各種奇奇怪怪的想法膨更,有網(wǎng)上找相關(guān)教程看到的,也有自己突發(fā)奇想的珍德,這里介紹一下high一下功能矗漾。

二敞贡、high 一下源碼

<li> <a title="把這個(gè)鏈接拖到你的Chrome收藏夾工具欄中" href='javascript:(function() {
    function c() {
        var e = document.createElement("link");
        e.setAttribute("type", "text/css");
        e.setAttribute("rel", "stylesheet");
        e.setAttribute("href", f);
        e.setAttribute("class", l);
        document.body.appendChild(e)
    }
 
    function h() {
        var e = document.getElementsByClassName(l);
        for (var t = 0; t < e.length; t++) {
            document.body.removeChild(e[t])
        }
    }
 
    function p() {
        var e = document.createElement("div");
        e.setAttribute("class", a);
        document.body.appendChild(e);
        setTimeout(function() {
            document.body.removeChild(e)
        }, 100)
    }
 
    function d(e) {
        return {
            height : e.offsetHeight,
            width : e.offsetWidth
        }
    }
 
    function v(i) {
        var s = d(i);
        return s.height > e && s.height < n && s.width > t && s.width < r
    }
 
    function m(e) {
        var t = e;
        var n = 0;
        while (!!t) {
            n += t.offsetTop;
            t = t.offsetParent
        }
        return n
    }
 
    function g() {
        var e = document.documentElement;
        if (!!window.innerWidth) {
            return window.innerHeight
        } else if (e && !isNaN(e.clientHeight)) {
            return e.clientHeight
        }
        return 0
    }
 
    function y() {
        if (window.pageYOffset) {
            return window.pageYOffset
        }
        return Math.max(document.documentElement.scrollTop, document.body.scrollTop)
    }
 
    function E(e) {
        var t = m(e);
        return t >= w && t <= b + w
    }
 
    function S() {
        var e = document.createElement("audio");
        e.setAttribute("class", l);
        e.src = i;
        e.loop = false;
        e.addEventListener("canplay", function() {
            setTimeout(function() {
                x(k)
            }, 500);
            setTimeout(function() {
                N();
                p();
                for (var e = 0; e < O.length; e++) {
                    T(O[e])
                }
            }, 15500)
        }, true);
        e.addEventListener("ended", function() {
            N();
            h()
        }, true);
        e.innerHTML = " <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>";
        document.body.appendChild(e);
        e.play()
    }
 
    function x(e) {
        e.className += " " + s + " " + o
    }
 
    function T(e) {
        e.className += " " + s + " " + u[Math.floor(Math.random() * u.length)]
    }
 
    function N() {
        var e = document.getElementsByClassName(s);
        var t = new RegExp("\\b" + s + "\\b");
        for (var n = 0; n < e.length; ) {
            e[n].className = e[n].className.replace(t, "")
        }
    }
 
    var e = 30;
    var t = 30;
    var n = 350;
    var r = 350;
    var i = "http://s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";
    var s = "mw-harlem_shake_me";
    var o = "im_first";
    var u = ["im_drunk", "im_baked", "im_trippin", "im_blown"];
    var a = "mw-strobe_light";
    var f = "http://s3.amazonaws.com/moovweb-marketing/playground/harlem-shake-style.css";
    var l = "mw_added_css";
    var b = g();
    var w = y();
    var C = document.getElementsByTagName("*");
    var k = null;
    for (var L = 0; L < C.length; L++) {
        var A = C[L];
        if (v(A)) {
            if (E(A)) {
                k = A;
                break
            }
        }
    }
    if (A === null) {
        console.warn("Could not find a node of the right size. Please try a different page.");
        return
    }
    c();
    S();
    var O = [];
    for (var L = 0; L < C.length; L++) {
        var A = C[L];
        if (v(A)) {
            O.push(A)
        }
    }
})()    '>High一下</a> </li>

網(wǎng)上找的教程是直接把這段代碼當(dāng)成一個(gè)菜單項(xiàng)加在博客主題配置的_config.yml文件中

menu:
  high: javascript:void(0)
menu_icons:
  high: play

像這種格式添加琳钉,這里只是舉個(gè)例子,實(shí)際操作一定要找到對(duì)應(yīng)的模塊添加啦桌。(先說(shuō)明一下個(gè)人使用的是NexT主題)第一個(gè) high 的javascript:void(0)是指a標(biāo)簽的跳轉(zhuǎn)鏈接甫男,其實(shí)這里的功能就是為了讓它不跳轉(zhuǎn)的验烧,另外還有一個(gè)功能,可以把空鏈接的a標(biāo)簽懸浮變成手型的鼠標(biāo)若治。第二個(gè) high對(duì)應(yīng)的play是展示的圖標(biāo),NexT主題使用的是fontawesome圖標(biāo)礼烈,這里的play就是其對(duì)應(yīng)的圖標(biāo)婆跑,想自己 diy 一下就去fontawesome上找個(gè)自己喜歡的滑进。

這樣的方法簡(jiǎn)單粗暴有效,并且還有一個(gè)好處峡碉,可以直接把這個(gè)鏈接保存成瀏覽器的書(shū)簽驮审,這樣就能在任何網(wǎng)頁(yè)都能夠調(diào)用這個(gè) High一下 的方法疯淫。且不評(píng)價(jià)這個(gè)方式好不好,但是如果這個(gè)功能就這樣結(jié)束未斑,那就太沒(méi)意思了币绩。所以,得改芽突。

三董瞻、high 一下獨(dú)立 cdn

最初的想法是把high一下獨(dú)立成一個(gè)js文件钠糊,方便使用 cdn 來(lái)調(diào)用。這個(gè)挺簡(jiǎn)單艘刚,js 提取出來(lái)成為一個(gè)函數(shù)截珍,然后給特定的元素綁定點(diǎn)擊觸發(fā)的事件即可。NexT主題加載外部 js 文件在 layout->_scripts->vendors.swg中云稚,我模仿了加載fancybox的方式静陈,添加了這段代碼:

{% if theme.high %}
  {% set js_vendors.high  = 'high/high.js?v=1.0.0' %}
{% endif %}

這樣的處理就可以在主題的配置文件中使用配置選擇是否打開(kāi)high一下功能,現(xiàn)在就還需要把high.js放到對(duì)應(yīng)的文件夾中拐格,我這邊的路徑是next->source->vendors->high->high.js捏浊。后來(lái)又發(fā)現(xiàn)high.js的源碼中還有著這么一段:

var f = "http://s3.amazonaws.com/moovweb-marketing/playground/harlem-shake-style.css";

外部還引用了一個(gè)亞馬遜云的 css 文件撞叨,兵來(lái)將擋水來(lái)土掩,css文件也要轉(zhuǎn)移:

var f = "/vendors/high/high.css";

css 放到和 js 同一個(gè)目錄下胡岔。
源碼里還有這么一段:

var i = musicUrl || "http://s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";

這個(gè)就是播放的歌曲地址里靶瘸,這個(gè)也可以隨意改毛肋。
但是!但是诗眨!但是辽话!重要的事情提醒三次卫病,這個(gè) js 是專(zhuān)門(mén)根據(jù)這首曲子寫(xiě)的典徘,我嘗試換了其他的曲子逮诲,效果都不理想幽告,所以就只能將就用這首曲子了裆甩。

四嗤栓、high 一下自定義頁(yè)面歌曲

就這樣就結(jié)束還是有點(diǎn)不甘心,我是希望能做到每個(gè)頁(yè)面都能夠自定義播放的曲子叨叙。雖然其他曲子都對(duì)不上這個(gè) js的節(jié)奏堪澎,但是這個(gè)想法的創(chuàng)意很棒樱蛤,必須得實(shí)現(xiàn)!
首先是在需要自定義曲子的文章中加上:

<div id="musicUrl" url="***"><div>

然后最終版high.js代碼是這樣:

document.getElementsByClassName('menu-item-high')[0].addEventListener('click', (function(){
    var play = false;
    var musicUrl = document.getElementById('musicUrl');
    if(musicUrl){
        musicUrl = musicUrl.getAttribute('url');
    }else{
        musicUrl = null;
    }
    return function(){
        if(play){
            console.log('Enjoying');
            return;
        }
        play = true;
        function c() {
            var e = document.createElement("link");
            e.setAttribute("type", "text/css");
            e.setAttribute("rel", "stylesheet");
            e.setAttribute("href", f);
            e.setAttribute("class", l);
            document.body.appendChild(e)
        }
         
        function h() {
            var e = document.getElementsByClassName(l);
            for (var t = 0; t < e.length; t++) {
                document.body.removeChild(e[t])
            }
        }
        
        function p() {
            var e = document.createElement("div");
            e.setAttribute("class", a);
            document.body.appendChild(e);
            setTimeout(function() {
                document.body.removeChild(e)
            }, 100)
        }
         
        function d(e) {
            return {
                height: e.offsetHeight,
                width: e.offsetWidth
            }
        }
         
        function v(i) {
            var s = d(i);
            return s.height > e && s.height < n && s.width > t && s.width < r
        }
         
        function m(e) {
            var t = e;
            var n = 0;
            while (!!t) {
                n += t.offsetTop;
                t = t.offsetParent
            }
            return n
        }
         
        function g() {
            var e = document.documentElement;
            if (!!window.innerWidth) {
                return window.innerHeight
            } else if (e && !isNaN(e.clientHeight)) {
                return e.clientHeight
            }
            return 0
        }
        
        function y() {
            if (window.pageYOffset) {
                return window.pageYOffset
            }
            return Math.max(document.documentElement.scrollTop, document.body.scrollTop)
        }
         
        function E(e) {
            var t = m(e);
            return t >= w && t <= b + w
        }
         
        function S() {
            var e = document.createElement("audio");
            e.setAttribute("class", l);
            e.src = i;
            e.loop = false;
            e.addEventListener("canplay", function() {
                setTimeout(function() {
                    x(k)
                }, 500);
                setTimeout(function() {
                    N();
                    p();
                    for (var e = 0; e < O.length; e++) {
                        T(O[e])
                    }
                }, 15500)
            }, true);
            e.addEventListener("ended", function() {
                N();
                h();
                paly = false;
            }, true);
            e.innerHTML = " <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>";
            document.body.appendChild(e);
            e.play()
        }
         
        function x(e) {
            e.className += " " + s + " " + o
        }
         
        function T(e) {
            e.className += " " + s + " " + u[Math.floor(Math.random() * u.length)]
        }
        
        function N() {
            var e = document.getElementsByClassName(s);
            var t = new RegExp("\\b" + s + "\\b");
            for (var n = 0; n < e.length; ) {
                e[n].className = e[n].className.replace(t, "")
            }
        }
         
        var e = 30;
        var t = 30;
        var n = 350;
        var r = 350;
        var i = musicUrl || "http://s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";
        var s = "mw-harlem_shake_me";
        var o = "im_first";
        var u = ["im_drunk", "im_baked", "im_trippin", "im_blown"];
        var a = "mw-strobe_light";
        var f = "/vendors/high/high.css";
        var l = "mw_added_css";
        var b = g();
        var w = y();
        var C = document.getElementsByTagName("*");
        var k = null;
        for (var L = 0; L < C.length; L++) {
            var A = C[L];
            if (v(A)) {
                if (E(A)) {
                    k = A;
                    break
                }
            }
        }
        if (A === null) {
            console.warn("Could not find a node of the right size. Please try a different page.");
            return
        }
        c();
        S();
        var O = [];
        for (var L = 0; L < C.length; L++) {
            var A = C[L];
            if (v(A)) {
                O.push(A)
            }
        }
    };
})(), false);

這樣就能自定義每篇文章的 high 的曲子都不一樣了,當(dāng)然也都純屬娛樂(lè)就轧,不要過(guò)于較真妒御。(因?yàn)橛型Χ嗯笥颜f(shuō)我神經(jīng),所以就暫時(shí)先把這個(gè)功能關(guān)閉了)送讲。

附上個(gè)人博客對(duì)應(yīng)博文地址:
http://lancelot_lewis.coding.me/2016/05/14/blog/hexo-high/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哼鬓,一起剝皮案震驚了整個(gè)濱河市边灭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌称簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件父虑,死亡現(xiàn)場(chǎng)離奇詭異频轿,居然都是意外死亡烁焙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)膳殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)九火,“玉大人岔激,你說(shuō)我怎么就攤上這事÷嵌Γ” “怎么了炫彩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵江兢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我邑贴,道長(zhǎng)衣摩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任宿稀,我火速辦了婚禮嵌洼,結(jié)果婚禮上封恰,老公的妹妹穿的比我還像新娘诺舔。我一直安慰自己,他們只是感情好许昨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布糕档。 她就那樣靜靜地躺著拌喉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪端仰。 梳的紋絲不亂的頭發(fā)上田藐,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天汽久,我揣著相機(jī)與錄音,去河邊找鬼诺擅。 笑死啡直,一個(gè)胖子當(dāng)著我的面吹牛酒觅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抒钱,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仗扬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蕾额,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤早芭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后诅蝶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體退个,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年调炬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了语盈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缰泡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匀谣,到底是詐尸還是另有隱情照棋,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布武翎,位于F島的核電站烈炭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宝恶。R本人自食惡果不足惜符隙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垫毙。 院中可真熱鬧霹疫,春花似錦、人聲如沸综芥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膀藐。三九已至屠阻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間额各,已是汗流浹背国觉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虾啦,地道東北人麻诀。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓痕寓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝇闭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呻率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,525評(píng)論 25 707
  • 這篇文章發(fā)表在我的個(gè)人博客上,為了更好的閱讀體驗(yàn)丁眼,請(qǐng)戳這里:jmyblog > 首先聲明:這并不是一篇教程。 這不...
    誰(shuí)把錢(qián)丟了閱讀 2,466評(píng)論 1 10
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)昭殉、插件苞七、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • 這個(gè)世界上有一種情懷叫感恩有你。每每聽(tīng)到時(shí)間管理課程里葉老師的感恩有你這句話時(shí)挪丢,都會(huì)不由自主的產(chǎn)生敬畏蹂风。特別是最近...
    2組13號(hào)石志霞閱讀 328評(píng)論 0 0
  • 2017-10-12 姓名:徐祖德 公司:廣東思沃精密機(jī)械有限公司 230期_利他1組 272期_樂(lè)觀2組志工 【...
    徐祖德閱讀 73評(píng)論 0 0