A Youtube videókat default fix mérettel beilleszteni az oldalakba, legalábbis az oldalon ugye az alábbi opciókat fogod megtalálni, ha az "embed" gombra kattintasz:

youtube-embed.jpg
youtube-embed.jpg

A rugalmas beillesztés módja

A Jquery segítségével van egy viszonylag egyszerű módja annak, hogy a youtube videót úgy illeszd be egy oldalba, hogy az mindig az őt befoglaló elem szélességéhez igazodjon, dinamikusan. Először megmutatnám a demo oldalt, utána jöjjön a magyarázat: Fluid avagy rugalmas Youtube videó demoCsak azokat a részleteket emelem ki, melyek a működés szempontjából fontosak, a többi csak a sallang. ### A CSS

<style type="text/css" media="screen">
	body {text-align:center;}
	div#wrapper {width:80%;margin:10px auto;}
	.youtube {width:100%;}
</style>

A div#wrapper fontos, erre figyelj. A CSS-sel beállítottam neki egy 80%-os szélességet (a body-hoz viszonyítva). A benne lévő .youtube class szélességét 100%-ra kell állítani. ### Az object

<div id="wrapper">
<object class="youtube" width="640" height="385">
	<param name="movie" value="http://www.youtube.com/v/iECKm2uSN1o?fs=1&amp;hl=en_US"></param>
	<param name="allowFullScreen" value="true"></param>
	<param name="allowscriptaccess" value="always"></param>
	<embed src="http://www.youtube.com/v/iECKm2uSN1o?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed>
</object>
</div>

Mint látod, a wrapper div-be került a videó (object). Ennek hagytam az alapértelmezett szélességét és magasságát (640 és 385), a későbbiekben sem kell vele foglalkozni, maradhat így. Ez a object kódrészlet a Youtube által ajánlott kódrészlettől 1 dologban tér el: megkaptad a class="youtube"-t (lásd a 2. sorban) ### A Javascriptek

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>

Be kell húzni az aktuális Jquery js-t. Bőven elég a min. verzió, úgysem fogunk belenyúlni és felesleges a klienst a fullos js-sel terhelni.

<script>
	var $origVideo = $(".youtube, .youtube embed");
	var aspectRatio = $origVideo.attr("height") / $origVideo.attr("width");

	$(window).resize(function() {
		var wrapWidth = $("#wrapper").width();
		$origVideo
			.width(wrapWidth)
			.height(wrapWidth * aspectRatio);
	}).trigger("resize");
</script>

... és itt a lényeg. Amire figyelni kell, az a 6. sorban lévő #wrapper, ami mindig meg kell egyezzen azzal az ID-val, amit adtál a videót befoglaló div-nek. Gyakorlatilag ennyi a lényeg, a többi a körítés. Tehát van egy a videót befoglaló div-ed valamilyen szélességgel, van a videó object-je amihez hozzáadod a youtube class-t, behúzol 2db javascriptet amiknél a másodikban megadod az object-t befoglaló div ID-ját ... és kész is vagy. ### A lecsupaszított demo forráskódja

Ha nagyon zavarna a demo oldal forráskódjában lévő sallang, akkor itt van tisztán a kód, benne csak a lényeg:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="hu-HU"> 

	<head>
		<title>Fluid avagy rugalmas Youtube videó demo</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<style type="text/css" media="screen">
			div#wrapper {width:80%;margin:10px auto;}
			.youtube {width:100%;}
		</style>
	</head>

	<body>
	<div id="wrapper">
	<object class="youtube" width="640" height="385">
		<param name="movie" value="http://www.youtube.com/v/iECKm2uSN1o?fs=1&amp;hl=en_US"></param>
		<param name="allowFullScreen" value="true"></param>
		<param name="allowscriptaccess" value="always"></param>
		<embed src="http://www.youtube.com/v/iECKm2uSN1o?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed>
	</object>
	</div>

	<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>
	<script>
		var $origVideo = $(".youtube, .youtube embed");
		var aspectRatio = $origVideo.attr("height") / $origVideo.attr("width");

		$(window).resize(function() {
			var wrapWidth = $("#wrapper").width();
			$origVideo
				.width(wrapWidth)
				.height(wrapWidth * aspectRatio);
		}).trigger("resize");
	</script>
	</body>

</html>

A demo mégegyszer: Fluid avagy rugalmas Youtube videó demo

Harder

Harder

Profil

Korábbi hozzászólások (2)

A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.

  1. Árpád Csikóswww.facebook.com/csikos.arpad

    Ez az amit pofonegyszerűnek szoktak nevezni, miután valaki kipróbálta :)
    S, hogy miért nem én "találtam" ki :)
    Nice! :)

  2. iPog

    a jquery script ugye a megadott (youtube embed kódban szereplő) height és width alapján számolja az aspect ratiot, ez okos dolog. :) (bár praktikusabb ?autohide=1 paraméterrel meghívni a videót, ezesetben nem kell pluszba az a 25px vagy 30px a kezelőfelületnek, ergo átméretezés után sem lesz fekete sáv.) ami viszont probléma, az több különböző méretű videó esetén jelentkezik, ugyanis csak az elsőt veszi figyelembe. tehát ha ugyanazon a lapon van először egy 16:9-es, majd egy 4:3-as videód, mindkettő 16:9 aránnyal kerül átméretezésre. ez a tényező meg fölöslegessé teszi azt, hogy a megadott értékek alapján számoljon, elég megadni, hogy mindig 16:9 legyen az aspect ratio... :/ dehát nem ez a cél, szóval inkább arra kellene megoldást találni, hogy több különböző képarányú videóval is működni tudjon a dolog.

    nem igazán vagyok még otthon jqueryben, ezért előfordulhat, hogy lehetőség van egyessével, egymás után sorban kalkulálni. lehetséges? hogyan? valaki?

Van hozzáfűznivalód? Írj nekem közvetlenül.

Kapcsolat