Показать сообщение отдельно
  #1 (permalink)  
Старый 26.06.2014, 21:56
Аспирант
Отправить личное сообщение для jule Посмотреть профиль Найти все сообщения от jule
 
Регистрация: 23.02.2013
Сообщений: 57

HTML5 audio вопросы
Доброго времени суток!Во время изучения HML5 audio, возникли вопросы.
Есть код:
<!DOCTYPE>
<html>
<head>
<title>HTML5 audio player</title>

</head>
<style type="text/css">
#player{
position:absolute;
border-radius:6px;
background-color:#000;
opacity:0.8;
height:30px;
padding:10px;
}
#switcher{
position:relative;
display:inline-block;
}
#progress{
position:relative;
display:inline-block;
border:1px solid #fff;
height:10px;
top:0px;
width:100px;
}
#loading{
position:relative;
background-color:#fff;
height:10px;
width:0px;
}
#buffered{
position:relative;
background-color:#fff;
height:10px;
opacity:0.5;
top:-10px;
}

</style>
<body>
<div id="player">
<button id="switcher">Play</button>
<div id="progress">
<div id="loading"></div>
<div id="buffered"></div>
</div>

</div>
<audio id="audio">
<source src="audio.mp3" type="audio/mp3"/>
</audio>

<script type="text/javascript">

var audio = document.getElementById("audio"),
    switcher = document.getElementById("switcher"),
    progress = document.getElementById("progress"),
    duration = document.getElementById("duration"),
    loading = document.getElementById("loading"),
    buffered = document.getElementById("buffered");
    
switcher.addEventListener("click", function(){
	if(switcher.innerHTML == "Play"){
		audio.play();
		switcher.innerHTML = "Pause";
	}	
	else{
		audio.pause();
		switcher.innerHTML = "Play";
	}
},false);
	
switcher.addEventListener("ended",function(){
	audio.pause();
	switcher.innerHTML = "Play";
},false);
switcher.addEventListener("play",function(){
	switcher.innerHTML = "Pause";
},false);
switcher.addEventListener("pause",function(){
	switcher.innerHTML = "Play";
},false);

progress.style.width = 100;
audio.addEventListener("timeupdate",function(){					
	loading.style.width = (audio.currentTime / audio.duration)*parseInt(progress.style.width); 
},false);
audio.addEventListener("progress",function(){						
	buffered.style.width = (audio.seekable.end(0) / audio.duration)*parseInt(progress.style.width); 

},false);

progress.addEventListener("click",function(event){
	audio.currentTime = Math.round(((event.pageX - this.offsetLeft)/parseInt(this.style.width))*audio.duration);
},false);

</script>
</body>
</html>


Вопросы:

1.При клике на определённую область элемента с id="progress":
progress.addEventListener("click",function(event){
	audio.currentTime = Math.round(((event.pageX - this.offsetLeft)/parseInt(this.style.width))*audio.duration);
},false);


Должно меняться текущее время мелодии, а следовательно, должна меняться длина элемента loading:
audio.addEventListener("timeupdate",function(){					
	loading.style.width = (audio.currentTime / audio.duration)*parseInt(progress.style.width); 
},false);

Но вся проблема в том, что она сдвигается немного дальше курсора (когда потестите - увидите), и не получается попасть в некоторые моменты мелодии сразу.

2.Второй вопрос, на мой взгляд, ещё интереснее - в браузере Chrome при проигрывании вот этой мелодии:
http://myzuka.ru/Song/3140254/Cold-War-Kids-Tuxedos

Если изменить текущее время песни, то когда ползунок дойдёт до конца прогрессбара, песня ещё будет проигрываться.Если текущее время не менять, то всё будет как надо.

Заранее спасибо.

Последний раз редактировалось jule, 26.06.2014 в 22:02.
Ответить с цитированием