Home » jQuery 應用

[jQ]自製 YouTube 影片播放清單

範例 1
範例 2
沒錯!只要 1,400 元就能獲得我們團隊完整的協助,讓效果能迅速的整合到您的網站,並保證瀏覽器的相容性。
立刻申請!

之前有介紹過一個用來取 YouTube 影片縮圖的 jQuery 外掛 - 「jYoutube 1.0」,就有網友問到是否能按下縮圖後就直接嵌入影片並播放呢?

既然我們已經取得到影片縮圖了,那麼要播放時只要利用 YouTube 提供的嵌入語法就能達到想要的效果囉!

在做出完整的播放清單之前,我們先來看較單純的例子:

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 來修飾一下:

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 的影片

youtube_movie_playlist_1

這樣是不是使用起來就更方便了呢!假設要綽成影片節目清單且讓影片顯示在其它區塊的話,那麼只要把最後輸出在指定的區塊就可以了。

讓我們再來修改一下 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 來排版:

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_movie_playlist_2

嘿~是不是就真的有像播放清單的感覺了呢!更專業的人還能設計專屬的外框架,這樣就獨一無二囉!

範例 1 範例 2 範例 3

檔案描述
基本的範例檔案(免空) 開始下載
基本的範例檔案 會員限定

107 筆針對 [jQ]自製 YouTube 影片播放清單 的迴響

    • 程式中的一些判斷是針對 YouTube 來做的..
      所以若要換成自己的影片連結時要修改判斷才行

      另外,像 YouTube 有提供預覽圖..因此在未播放前可以抓它的預覽圖
      但你自己做的話...預覽圖可能要額外設定才行

  1. 上面的問題不用麻煩你了, 我研究到了, 但還有一問題在css裡 a:active 是無效的嗎?
    ul.playlist li:active {background-color:#000;}
    ul.playlist li a:active {color:#FFF;background-color:#000;}
    ul.playlist li a:active img {color:#FFF;background-color:#000;}

  2. 你好 我已成功做到jYoutube 1.0 縮圖~
    那在做jQuery時要把那些檔全刪除嗎?(jquery-1.2.6.min.js,jyuotube.js)

    因我做到時,只能顯示url而沒有圖....

    Thanks

發表迴響