2011-04-21 17 views
6

Bir video oynatıldığında basıldığında bir video eklemeye çalışıyorum ve video bittiğinde bir resim görüntülenir. Sorun şu ki, düğmeye bastığımda 2., video biter ve olay dinleyicisi çağrılmadıkça hiçbir şey olmuyor.Mobile Safari HTML5 videosu - etkinlik dinleyicisi 'sona erdi' 2. kez ateş etmiyor

var video = document.getElementById("video"); 

function playVideo() { 
    video.style.display="block"; 
    //video.load() [adding this the 2nd time wont play] 
    video.play(); 
    video.addEventListener('ended', videoEnd, false); 
} 

function videoEnd() { 
    video.style.display="none"; 
    bg_image.src="image.jpg"; 
} 
+0

video.currentTime = 0.1 eklenmesi; videoEnd() olay dinleyicisinin ikinci kez ateş etmesine izin verecek, ancak 3. kez işe yaramadı. – Jim

+0

Bu tam sorunu yaşıyorum, ancak masaüstü Safari (5.0.5). – JKS

+0

load() veya play() çağrısından önce video.stop() eklemeyi denediniz mi? – derrylwc

cevap

0

Bir VİDEO eleman sonu "sona erdi" etkinlik artık yangınları ulaştığında inanıyoruz. Görünüşe göre sadece "duraklama" etkinliği patlar.

Sadece "timeupdate" olayını dinleyerek ve currentTime özelliğinin VIDEO öğesinin duration özelliğine eşdeğer olup olmadığını kontrol eden bir işleyici yöntemini ilişkilendirerek bunu yaşadım.

UPDATE: Bazen iOS'ta "sona eren" olayını görüyorum. Her zaman "duraklama" olayını görüyorum. Bu bilgiyi tarayıcı konsolunda görüntüleyen bazı jQuery kodları şunlardır:

(function ($) { 
     $("#vid").bind("timeupdate", function (e) { 
      console.log(e.type + " - " + (this.currentTime == this.duration)); 
     }); 
    })(jQuery); 
+0

Burada, videonun toplam süreden önce durması nedeniyle sona erdiğin yazıyor: http://stackoverflow.com/questions/14714385/html-5-video-ended –

0

Bu Safari'nin HTML5 video etiketi uygulanmasında garip hatadan kaynaklanıyor:

Ayrıca o video bg satın alabilirsiniz. Windows için Safari'de de çoğaltılabilir. Bu sorun için bir geçici çözüm buldum - sadece loadedmetadata etkinliğine bağla ve currentTime değerini sıfır olmayan bir değere ayarla. Bu jsfiddle bu demo deneyebilirsiniz

<!doctype html> 
<html> 
<head> 
<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script> 
</head> 
<body> 
<video id="video" width="500" height="400" controls autoplay></video> 
<script> 
var src = [ 
"http://content.adfox.ru/131007/adfox/205544/865991_11.mp4", 
"http://all.rutube.ru/130627/gpmdigital/217059/805529_11.mp4" 
]; 
var curSrc = 0; 
$(function() { 
$('#video').attr("src", src[curSrc % src.length]); 
curSrc++; 
var video = $('#video').get(0); 

$('#video') 
.on('loadedmetadata', function() { 
    video.currentTime=0.01; 
    video.play(); 
}) 
.on('ended', function() { 
    console.log('ended'); 
    video.src = src[curSrc % src.length]; 
    video.load(); 
    curSrc++; 
}); 
}); 
</script> 
</body> 
</html> 

: İşte bir örnek ben bulduk http://jsfiddle.net/j2knz6sv/

İlgili konular