Ниже приведено событие для видеоплеера HTML5.
Мы с моим партнером были заняты в течение очень большой части дня по этому вопросу и надеемся, что кто-то может дать некоторое представление о проблеме. Мы смогли получить доступ к событию progress с простым js, как показано ниже, но при попытке доступа к нему с помощью jQuery в консоли получается неопределенное значение. Любая помощь / рекомендации с благодарностью.
//JS - Works like a charm
document.addEventListener("DOMContentLoaded", init, false);
function init() {
var v = document.getElementById('test-vid');
console.log(v)
v.addEventListener('progress', progress, false);
}
function progress(e) {
console.log(e.lengthComputable + ' ' + e.total + ' ' + e.loaded);
}
// jQuery - NO BUENO - Undefined rendered in console
var vid = $('#test-vid');
$(vid).bind("progress", function(e){
console.log(e.total + ' ' + e.loaded + ' ' + e.lengthComputable );
});
Заранее спасибо,
JN
4 ответа
Почему бы просто не использовать:
$('video#test-vid').bind("progress",function(e){
console.log(e.total + ' ' + e.loaded + ' ' + e.lengthComputable );
});
Это должно работать, JQuery должен связывать события
Взгляните сюда
Несколько диких догадок ...
У тебя есть:
var vid = $('#test-vid');
$(vid).bind(...
Во второй строке vid уже является объектом jQuery. Вы пытались просто использовать vid.bind()
?
Кроме того, если вы знаете, что addEventListener
работает, почему бы не использовать его? Возможно, вам повезет, если после выбора с помощью jQuery вы создадите недекорированный объект DOM:
var vid = $('#test-vid');
vid.get().addEventListener(...
Вы получаете неопределенное значение, потому что jQuery использует белый список свойств события, чтобы нормализовать события, ни загруженные, ни итоговые значения в этом списке.
Если вы хотите получить информацию, вы должны использовать: e.originalEvent.lengthComputable и т.д ..
Но, честно говоря, вы не должны этого делать. Свойства этого события относятся только к Firefox и больше не являются частью спецификации html5. Вы должны использовать буферизованный объект в других браузерах. Прогресс действительно проблематичен в html5 медиаэлементах. Safari на iPad работает не так, как Safari на Mac и так далее.
Кросс-браузерная реализация события progress может быть найдена в jMediaelement-libary: http://github.com/ aFarkas / jMediaelement / BLOB / 1.1.3 / SRC / mm.base - api.js # L312
С уважением, Алекс
Используйте originalEvent:
if(e.originalEvent.lengthComputable && e.originalEvent.total){
var loaded = e.originalEvent.loaded / e.originalEvent.total * 100;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.