Web-developerИспользуем видео как фон сайта. Разбираемся в youtube api. Плеер Chromeless

Итак, я расскажу как можно вместо обычного фона использовать видео без флеша и html5. Делать мы это будем с помощью youtube api и немного мозгов. Задача у нас простая: поместить ролик под основной контент сайта и вывести кнопки управления видео на специальную панель. По-моему такое решение будет очень круто смотреться на сайтах музыкальных групп etc.

Живой пример | Скачать архив

Использовать мы будем специальный плеер ютуба «Chromeless Player». Он отличается тем, что полностью контролируется с помощью JavaScript и не имеет визуального оформления. Примеры можно найти на Google PlayGround.

Итак, создадим файл index.html, script.js и style.css.

index.html




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>DevShack youtube api демо</title>

<link rel="stylesheet" href="style.css" type="text/css" media="all" />
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
	google.load("swfobject", "2.1");
</script>
<script src="script.js"></script>
</head>
<body>
	<div id="wrapper"><!-- Здесь начинается весь контент -->

		<div id="panel">
			Управление звуком:
			<a href="javascript:void(0)" onclick="setVideoVolume('0');">Нет</a>
			<a href="javascript:void(0)" onclick="setVideoVolume('20');">Тихо</a>
			<a href="javascript:void(0)" onclick="setVideoVolume('60');">Средне</a>
			<a href="javascript:void(0)" onclick="setVideoVolume('100');">Громко</a>
		</div>

		<div id="content">
			<h1>Правда выглядит круто?</h1><br />
			<a href="http://devshack.ru/2010/10/ispolzuem-video-kak-fon-sajta-razbiraemsya-v-youtube-api-pleer-chromeless/">Вернутья к уроку...</a>
		</div>	

	</div><!-- /wrapper -->

	<div id="videoDiv">Видео загружается...</div>

</body>
</html>


Здесь обязательно в head подключен файл с нашем js кодом и файл для работы всего api. Далее идет элемент с id=wrapper. Он будет симулировать основной и в нем и нужно располагать весь основной контент страницы. Далее id=content. В него я вставлю уже непосредственно сам текст. За ним идет панелька c настройками звука (я включил в урок только их т.к. использование их наиболее оправдано. Остальные опции врятли нужны. Так же я уже в код ссылок прописал функции управления звуком в плеере. О них мы будем говорить позже) и div в который будет заменяться на плеер.

script.js



Здесь я повырезал некоторые ненужные нам функции. Со всем функционалом можете ознакомиться в справке google youtube api. Далее идет код с подробными комментариями. Информацию по всем функциям можно найти на Справочное руководство по API YouTube для проигрывателя JavaScript.

// Функция вызовется при появление ошибки
function onPlayerError(errorCode) {
	alert("Упс. Что-то пошло не так... Код ошибки:" + errorCode);
}

// Allow the user to set the volume from 0-100
function setVideoVolume(volume) {
	if (isNaN(volume) || volume < 0 || volume > 100) {
		alert("Упс. Что-то пошло не так...");
	}
	else if (ytplayer) {
		ytplayer.setVolume(volume);
	}
}

// Начать проигрывать ролик
function playVideo() {
	if (ytplayer) {
		ytplayer.playVideo();
	}
}

// По окончанию ролика будет вызвана эта функция. Она запустит ролик повторно.
function StateChange() {
	if (ytplayer) {
		if (ytplayer.getPlayerState() == 0) {
			ytplayer.playVideo()
		}
	}
}

// Эта функция автоматическив вызывается при загрузки плеера
function onYouTubePlayerReady(playerId) {
	ytplayer = document.getElementById("ytPlayer");
	// В случаи ошибки вызывается функция
	ytplayer.addEventListener("onError", "onPlayerError");
	ytplayer.addEventListener("onStateChange", "StateChange");
	// Загрузка видео в плеер. Может использоваться отдельно.
	ytplayer.cueVideoById("mVFeHv4oxJc");
	// Запуск видео сразу после загрузки
	ytplayer.playVideo()
	// Сразу ставим громкость на 20 из 100
	setVideoVolume('20')
}

// The "main method" of this sample. Called when someone clicks "Run".
function loadPlayer() {
	// Lets Flash from another domain call JavaScript
	var params = {
		allowScriptAccess: "always",
		wmode: "opaque"
	};
	// Ставим ИД для embed
	var atts = {
		id: "ytPlayer"
	};
	// Вся магия происходит с помощью SWFObject (http://code.google.com/p/swfobject/)
	// Сюда можете вписать ваши параметры для видео
	swfobject.embedSWF("http://www.youtube.com/apiplayer?" +
						"&enablejsapi=1&playerapiid=player1&hd=1",
						"videoDiv", "100%", "100%", "8", null, null, params, atts);
}

// Загружаем видео.
function _run() {
	loadPlayer();
}
google.setOnLoadCallback(_run);


Итак, здесь функция ytplayer.cueVideoById(«mVFeHv4oxJc») задает какой ролик воспроизводить. Id ролика берется из его ссылки на ютубе. В swfobject.embedSWF я приписал к параметрам видео hd=1. Это значит, что если есть видео в HD, то будет воспроизводиться именно оно. Так же как раз параметр wmode: «opaque» и позволит нашему ролику быть на фоне страницы. Остальное вам врятли придется менять и я оставляю это без подробных объяснений. Да кстати, если вы не хотите чтобы все видели всплывающее окно в случаи ошибки, просто удали код alert(…).

style.css



Чем дальше, тем интереснее… Теперь настроем внешний вид страницы.

* {
	padding: 0;
	margin: 0;
	font-family: Tahoma, Geneva, sans-serif;
}
/* Этот код лучше не редактировать */
body {
	width: 100%;
	height: 100%;
	background: black;
}
#ytPlayer {
	position: fixed;
	z-index: 0;
}
#wrapper {
	position: absolute;
	left: 0;
	top: 0;
	z-index: 1;
	width: 100%;
	height: 100%;
	overflow: auto;

}
/* Далее уже можете сами настраивать все как хотите */

#panel {
	background: rgba(0, 0, 0, .7);
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	border-radius: 10px;
	padding: 0 16px;
	line-height: 32px;
	color: #999;
	font-size:12px;
	width: 600px;
	margin: 20px auto;
	text-align:right
}
	#panel a {
		color: #f05;
		text-decoration: none;
	}
	#panel a:hover {
		text-decoration: underline;
	}
#content {
	width: 600px;
	margin: 20px auto;
}
	#content h1 {
		background: yellow;
		display: inline-block;
		font-weight: normal;
		text-transform:uppercase;
		margin-top:200px;
		font-size: 30px;
		line-height: 42px;
		padding: 2px 10px;
	}
	#content a {
		color: #f05;
		font-size: 24px;
		line-height: 36px;
		padding: 2px 10px;
		text-decoration: none;
		background: black;
		display: inline-block;
	}


Вроде выглядит достаточно неплохо. Во всех последних браузерах работает отлично. Если что, скролл появляется как обычно и прокрутка осуществляется так же как и без видео.

источник
  • +4
  • Guf
  • 01 ноября 2010, 15:37

Комментарии (3)

без флеша

Я уже чуть было не подумал, что совсем без флеша.
google.load("swfobject", "2.1");
А как тут заменит видео?
Это что-ли swfobject.embedSWF(«www.youtube.com/apiplayer?» +
"&enablejsapi=1&playerapiid=player1&hd=1",
                                                "videoDiv", "100%", "100%", "8", null, null, params, atts);<br /><br />Обьясните подробнее 
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.