jekyll個人部落格中新增音樂播放外掛

yizibi發表於2018-10-16

最近在打理自己的部落格,突發奇想,想在部落格裡播放音樂;想著應該可以實現吧;感覺有時候,複習筆記,聽著音樂,好有感覺的樣子;

摸索過程

iframe標籤嘗試

因為,平時都用markdown記錄,就搜了一下,markdown支援播放音樂;

就搜到這篇文章,主要說的是,用iframe這個標籤,來實現;因為markdown其實就是 一種html的轉換語法,內部也同時支援直接寫html標籤;

然而,我嘗試了一下,不行;網上大部分都是網易雲音樂外掛播放的;

特點就是 UI 好看;不妨,你也可以試試,反正我失敗了;

jekyllcodex外掛嘗試

我又嘗試了其他的辦法,我在想,是不是不同的部落格驅動,底層對html解析也不近相同,想到這裡,我換了關鍵詞搜尋,然後就看到這篇文章,我的技術好友Hope寫的不錯,基本可以實現在部落格中播放音樂,不過文章中的最後需要在 _layout.html檔案中新增程式碼的,跟官網不一樣,估計是 JS 檔案呼叫充重複,作者沒有寫;我按照官網上的,可以正常顯示;

環境要求

  • jekyll
  • 七牛

開始使用

step1

首先下載這個檔案open-embed.html,右鍵,另存為Html;下面是原始碼,也可以複製儲存下面的原始碼;

<style>
.videoWrapper {
	position: relative;
	padding-bottom: 56.333%;
	height: 0;
    background: black;
}
.videoWrapper iframe {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
    border: 0;
}    
</style>

<script>
function get_youtube_id(url) {
    var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
    return (url.match(p)) ? RegExp.$1 : false;
}
function vimeo_embed(url,el) {
    var id = false;
    $.ajax({
      url: 'https://vimeo.com/api/oembed.json?url='+url,
      async: true,
      success: function(response) {
        if(response.video_id) {
          id = response.video_id;
          if(url.indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0;
          if(url.indexOf('loop=1') !== -1) var loop=1; else var loop=0;
          var theInnerHTML = '<div class="videoWrapper"><iframe src="https://player.vimeo.com/video/'+id+'/?byline=0&title=0&portrait=0';
          if(autoplay==1) theInnerHTML += '&autoplay=1';
          if(loop==1) theInnerHTML += '&loop=1';
          theInnerHTML += '" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>'; 
          el.innerHTML = theInnerHTML;
        }
      }
    });
}
function video_embed() {
    var p = document.getElementsByTagName('p');
    for(var i = 0; i < p.length; i++) {
        //check if this is an external url (that starts with https:// or http://
        if (p[i].innerHTML.indexOf("http://") == 0 ||
            p[i].innerHTML.indexOf("https://") == 0) {
            var youtube_id = get_youtube_id(p[i].innerHTML);
            if(youtube_id) {
                if(p[i].innerHTML.indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0;
                if(p[i].innerHTML.indexOf('loop=1') !== -1) var loop=1; else var loop=0;
                var theInnerHTML = '<div class="videoWrapper"><iframe width="720" height="420" src="https://www.youtube.com/embed/' + youtube_id + '?rel=0&showinfo=0';
                if(autoplay==1) theInnerHTML += '&autoplay=1';
                if(loop==1) theInnerHTML += '&loop=1&playlist='+youtube_id+'&version=3';
                theInnerHTML += '" frameborder="0" allowfullscreen></iframe></div>';
                p[i].innerHTML = theInnerHTML;
            }
            if(p[i].innerHTML.indexOf('vimeo.com') !== -1) {
                //ask vimeo for the id and place the embed
                vimeo_embed(p[i].innerHTML,p[i]);
            }
        }
    }
}
video_embed();

function mp3_embed() {
    var p = document.getElementsByTagName('p');
    for(var i = 0; i < p.length; i++) {
        if(p[i].innerHTML.indexOf('.mp3') !== -1) {
            var str = p[i].innerHTML.split('?');
            if(str.length == 1) str[1] = '';
            var str1 = str[1];
            str1 = str1.replace('&','').replace('&','');
            str1 = str1.replace('autoplay=1','').replace('autoplay=0','');
            str1 = str1.replace('loop=1','').replace('loop=0','');
            str1 = str1.replace('controls=0','').replace('controls=1','');

            if (str[0].lastIndexOf('.mp3', str[0].length - 4) === str[0].length - 4 && str1.length == 0) {
                if(str[1].indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0;
                if(str[1].indexOf('loop=1') !== -1) var loop=1; else var loop=0;
                if(str[1].indexOf('controls=0') !== -1) var controls=0; else var controls=1;
                var newInnerHTML = '<audio';
                if(autoplay==1) newInnerHTML += ' autoplay';
                if(loop==1) newInnerHTML += ' loop';
                if(controls==1) newInnerHTML += ' controls';
                newInnerHTML += '><source src="'+str[0]+'" type="audio/mpeg">Your browser does not support the audio element.</audio>';
                p[i].innerHTML = newInnerHTML;
            }
        }
    }
}
mp3_embed();
</script>
複製程式碼

step2

將上一步儲存好的檔案,儲存到_includes目錄下,就像下面這個樣子

jekyll個人部落格中新增音樂播放外掛

step3

_layouts目錄下,default.html這個檔案,開啟,在最下面,找到對應的標籤</body>,加入如下程式碼,注意:標籤不要重複了

jekyll個人部落格中新增音樂播放外掛

使用語法

藉助七牛雲之類的圖床或雲端儲存,將需要的音樂檔案上傳至圖床,並獲得外鏈。

然後,在Markdown中直接使用

<p>音樂外鏈url</p>
複製程式碼

示例

按照上面的步驟走,即可獲得如下效果的播放器(以下音樂為「西安人的歌」)

image

結束了;

文章首發個人部落格,轉載參考註明來源jekyll個人部落格中新增音樂播放外掛

如果你在使用的過程中,遇到問題了,歡迎郵件或者給我留言,謝謝;

相關文章