之前有介紹過一個用來取 YouTube 影片縮圖的 jQuery 外掛 - 「jYoutube 1.0」,就有網友問到是否能按下縮圖後就直接嵌入影片並播放呢?
既然我們已經取得到影片縮圖了,那麼要播放時只要利用 YouTube 提供的嵌入語法就能達到想要的效果囉!
在做出完整的播放清單之前,我們先來看較單純的例子:
檢視原始碼 HTML
1 2 3 4 5 6 7 | <body> <ul class="playlist"> <li><a href="http://www.youtube.com/watch?v=htCW5fcyLUU">暮光之城第三集 蝕預告片</a></li> <li><a href="http://www.youtube.com/watch?v=GeS0gAIg1Io">《暮光之城:新月》預告片</a></li> <li><a href="http://www.youtube.com/watch?v=wngwJ-GEJVg">【暮光之城】中文版預告片</a></li> </ul> </body> |
清單中只是放了 YouTube 影片網址及影片的名稱,接著再用 CSS 來修飾一下:
檢視原始碼 CSS
1 2 3 4 5 6 7 8 9 10 11 12 | ul.playlist { margin: 0; padding: 0; list-style: none; } ul.playlist li { margin-bottom: 5px; } ul.playlist li a img { border: 0; vertical-align: middle; } |
因為等等會用程式在超連結中加入圖片,為了不要出現醜醜的框線,這邊就先把圖片的框線拿掉。準備好就能開始動手寫 jQuery 囉:
檢視原始碼 JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | $(function(){ var thumbSize = 'large', // 設定要取得的縮圖是大圖還是小圖 // 大圖寬高為 480X360;小圖寬高為 120X90 swfWidth = '240', // 限制圖片的寬及 YouTube 影片的寬 swfHeight = '180', // 限制圖片的高及 YouTube 影片的高 autoPlay = '&autoplay=1', // 是否載入 YouTube 影片後自動播放;若不要自動播放則設成 0 fullScreen = '&fs=1'; // 是否允許播放 YouTube 影片時能全螢幕播放 $('ul.playlist>li>a').each(function(){ // 取得要連結轉換的網址及訊息內容 var _this = $(this), _url = _this.attr('href'), _info = _this.text(), _type = (thumbSize == 'large') ? 0 : 2; // 取得 vid var vid = _url.match('[\\?&]v=([^&#]*)')[1]; // 取得縮圖 var thumbUrl = "http://img.youtube.com/vi/"+vid+"/" + _type + ".jpg"; // 把目前超連結的內容轉換成圖片並加入 click 事件 _this.html('<img src="'+thumbUrl+'" alt="'+_info+'" title="'+_info+'" width="'+swfWidth+'" height="'+swfHeight+'" />').click(function(){ return false; }).focus(function(){ this.blur(); }).children('img').click(function(){ // 當點擊到圖片時就轉換成 YouTube 影片 var swf = '<object height="'+swfHeight+'" width="'+swfWidth+'">'; swf += '<param name="movie" value="http://www.youtube.com/v/'+vid+autoPlay+fullScreen+'"></param>'; swf += '<param name="wmode" value="transparent"></param>'; swf += (fullScreen == '&fs=1') ? '<param name="allowfullscreen" value="true"></param>' : ''; swf += '<embed type="application/x-shockwave-flash" src="http://www.youtube.com/v/'+vid+autoPlay+fullScreen+'" '; swf += (fullScreen == '&fs=1') ? 'allowfullscreen="true" ' : ''; swf += 'wmode="transparent" height="'+swfHeight+'" width="'+swfWidth+'"></embed>'; swf += '</object/>'; $(this).parent('a').html(swf); return false; }); }); }); |
因為從 YouTube 取得的縮圖只有兩種固定的尺寸,如果要其它尺寸的話就需要自訂並透過屬性來指定才行。另外也能設定是否在影片載入後能自動播放或是是否允許全螢幕播放。
一開始瀏覽時就是預覽的縮圖,當點下該圖片則會轉換成 YouTube 的影片
這樣是不是使用起來就更方便了呢!假設要綽成影片節目清單且讓影片顯示在其它區塊的話,那麼只要把最後輸出在指定的區塊就可以了。
讓我們再來修改一下 HTML:
檢視原始碼 HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <body> <div class="tv"> <div class="video"></div> <ul class="playlist"> <li><a href="http://www.youtube.com/watch?v=htCW5fcyLUU">暮光之城第三集 蝕預告片</a></li> <li><a href="http://www.youtube.com/watch?v=GeS0gAIg1Io">《暮光之城:新月》預告片</a></li> <li><a href="http://www.youtube.com/watch?v=wngwJ-GEJVg">【暮光之城】中文版預告片</a></li> <li><a href="http://www.youtube.com/watch?v=4VTT3v9TBIo">【暮光之城2:新月】中文版前導預告【雅各篇】</a></li> <li><a href="http://www.youtube.com/watch?v=bwd7BbFWYw0">暮光之城2新月最終版預告</a></li> <li><a href="http://www.youtube.com/watch?v=_kerQfD1LuA">暮光之城新月MTV 預告片New Moon Trailer</a></li> <li><a href="http://www.youtube.com/watch?v=fDhRS8Gd1bA">暮光之城2新月The Twilight Saga: New Moon預告</a></li> <li><a href="http://www.youtube.com/watch?v=LwfZl1t-dQI">暮光之城MV - Time Will Tell</a></li> </ul> </div> </body> |
多了 .video 是要用來放置影片用的區塊,接著再用 CSS 來排版:
檢視原始碼 CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ul.playlist { margin: 0; padding: 0; list-style: none; width: 260px; float: left; } ul.playlist li { margin: 0 3px; float: left; } ul.playlist li a img { border: 0; vertical-align: middle; } .tv { background: #666; padding: 10px; width: 740px; height: 360px; } .video { float: left; width: 480px; height: 360px; } |
再來就是最重要的程式部份:
檢視原始碼 JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | $(function(){ var thumbSize = 'large', // 設定要取得的縮圖是大圖還是小圖 // 大圖寬高為 480X360;小圖寬高為 120X90 imgWidth = '120', // 限制圖片的寬 imgHeight = '90', // 限制圖片的高 swfWidth = '480', // 指定 YouTube 影片的寬 swfHeight = '360', // 指定 YouTube 影片的高 autoPlay = '&autoplay=0', // 是否載入 YouTube 影片後自動播放;若不要自動播放則設成 0 fullScreen = '&fs=1'; // 是否允許播放 YouTube 影片時能全螢幕播放 $('.playlist>li>a').each(function(){ // 取得要連結轉換的網址及訊息內容 var _this = $(this), _url = _this.attr('href'), _info = _this.text(), _type = (thumbSize == 'large') ? 0 : 2; // 取得 vid var vid = _url.match('[\\?&]v=([^&#]*)')[1]; // 取得縮圖 var thumbUrl = "http://img.youtube.com/vi/"+vid+"/" + _type + ".jpg"; // 把目前超連結的內容轉換成圖片並加入 click 事件 _this.html('<img src="'+thumbUrl+'" alt="'+_info+'" title="'+_info+'" width="'+imgWidth+'" height="'+imgHeight+'" />').click(function(){ return false; }).focus(function(){ this.blur(); }).children('img').click(function(){ // 當點擊到圖片時就轉換成 YouTube 影片 var swf = '<object width="'+swfWidth+'" height="'+swfHeight+'">'; swf += '<param name="movie" value="http://www.youtube.com/v/'+vid+autoPlay+fullScreen+'"></param>'; swf += '<param name="wmode" value="transparent"></param>'; swf += (fullScreen == '&fs=1') ? '<param name="allowfullscreen" value="true"></param>' : ''; swf += '<embed type="application/x-shockwave-flash" src="http://www.youtube.com/v/'+vid+autoPlay+fullScreen+'" '; swf += (fullScreen == '&fs=1') ? 'allowfullscreen="true" ' : ''; swf += 'wmode="transparent" width="'+swfWidth+'" height="'+swfHeight+'"></embed>'; swf += '</object/>'; $('.video').html(swf); return false; }); }); // 先載入第一個影片 $('.playlist>li>a').eq(0).children('img').click(); // 變更影片播放為自動播放 autoPlay = '&autoplay=1'; }); |
為了讓影片能獨立尺寸,因此就把圖片跟影片尺寸的參數部份分開來設定。若沒問題的話就來看效果囉!
嘿~是不是就真的有像播放清單的感覺了呢!更專業的人還能設計專屬的外框架,這樣就獨一無二囉!
男丁老師你好,
有朋友剛好要我做一個類似功能,在網路上找到這一後,真太好了,請問可以引用嗎?
另外,請問YouTube某一影片播完後會出現其他廣告相關影片,可以去掉嗎?
已解決,只要參數加上&rel=0即可,另外&showinfo=0可以連抬頭都去了!
拿去用是ok的, 也謝謝你把心得分享給其它人~
老師您好:
此語法內playlist預設8部影片;
如果網站有8部以上的影片,
請問要如何用jq做成playlist左右切換的功能呢?
其實那就只是一般的滑動, 可以參考類似的方式來做: 左右水平廣告輪播
老師您好:
依此製作出來的playlist是預設八個項目;
如果有超過8個項目,請問要如何做成分頁呢??
麻煩您協助指導,謝謝!
除了滑動之外, 像 JQuery Quick Pagination 也是不錯的方式
老師:
我有一堆後製的影片上傳到youtube, 您這個插件對我來說, 真的很好用.
我玩了一天都OK, 但是如果在我的galaxy Note手機上點擊影片縮圖, 它會跳出對話框, 問你要不要
在 youtube上觀看. 我不會改.
在行動裝置上會特別跳出的部份我再測試看看XD
老師您好:
請問這個 範例3 要如何加到opencart的首頁呢?
我在 pencart官網找到的 Module 没有像範例3那麼方便(可以切換八個影片) http://www.opencart.com/index.php?route=extension/extension/info&extension_id=335&path=5&filter_search=youtube&filter_license=0
而且pencart官網載到的似乎不能 Full Screen,點了右下角的Full Screen没什麼反應。
麻煩老師您幫忙解答! 謝謝! 感恩!!
如果在不寫 php 的前提下, 你可以直接到 catalog\view\theme\default\template\common 中打開像是 home.tpl 等檔案,
然後直接把範例程式的 html, css, js 都加上應該也是可以..但, 排版可能還是要調整
男丁老師,
如果要放Facebook影片, 那下列影片縮圖語法要怎麼改呢?不好意思, 以前上過老師的課,但學藝不精. 忘了"[\\?&]v=([^&#]*"是什麼意思了.
// 取得 vid
var vid = _url.match('[\\?&]v=([^&#]*)')[1];
// 取得縮圖
var thumbUrl = "http://img.youtube.com/vi/"+vid+"/" + _type + ".jpg";
這段是一個正規表示法, 其實就是要從網址中截出 vid 的字串而已!
男丁老師
想請教一下,那如果我是要用類似土豆網呢?!
因為看您的範例寫得實在很實用,但是是否只能使用在youtube呢?!
感謝您
老師你好:
小弟目前正在進行專題網站研究中想要引用此程式
不知道能不能,專題是產學合作所以不知道是不是商業性,如果說要引用成示範例(程式碼部分)要注意什麼事情才不會觸法
有告知就好了~拿去用沒關係!!
只要不把範例直接拿去賣就好了..
請問如何將右列的縮圖播放列移至播放視窗下方,且僅以文字按鈕顯示
這其實只是 html, css 排版而已, 位置可以隨意調整
您好,有個問題想請教您。用jQuery製作 YouTube 影片播放清單,剛好很適用於Google Blogger,但因限於版面關係,中間版面無法使用版大的格局,右邊的點選縮圖可否移至影片播放框的下方排列,或以文字按鈕替代?
可以的, 只要把程式中產生圖片的部份拿掉應該就可以囉!