Нажатие кнопки "HTML 5" для воспроизведения, приостановки видео, разрыва кнопки воспроизведения
Я пытаюсь воспроизвести видео, чтобы играть и делать паузу, как на YouTube (с помощью кнопки воспроизведения и паузы, и нажатия самого видео.)
<video width="600" height="409" id="videoPlayer" controls="controls">
<!-- MP4 Video -->
<source src="video.mp4" type="video/mp4">
</video>
<script>
var videoPlayer = document.getElementById('videoPlayer');
// Auto play, half volume.
videoPlayer.play()
videoPlayer.volume = 0.5;
// Play / pause.
videoPlayer.addEventListener('click', function () {
if (videoPlayer.paused == false) {
videoPlayer.pause();
videoPlayer.firstChild.nodeValue = 'Play';
} else {
videoPlayer.play();
videoPlayer.firstChild.nodeValue = 'Pause';
}
});
</script>
У вас есть идеи, почему это нарушит кнопку управления воспроизведением и паузой?
Ответы
Ответ 1
Простейшая форма заключается в использовании слушателя onclick
:
<video height="auto" controls="controls" preload="none" onclick="this.play()">
<source type="video/mp4" src="vid.mp4">
</video>
Нет jQuery или сложного кода Javascript.
Воспроизведение/Пауза может выполняться с помощью onclick="this.paused ? this.play() : this.pause();"
.
Ответ 2
Не поднимать старый пост, но я приземлился на этот вопрос в своем поиске того же решения. В итоге я придумал что-то свое. Понял, что буду участвовать.
HTML:
<video class="video"><source src=""></video>
JAVASCRIPT: "JQUERY"
$('.video').click(function(){this.paused?this.play():this.pause();});
Ответ 3
Добавление return false;
работало для меня:
версия jQuery:
$(document).on('click', '#video-id', function (e) {
var video = $(this).get(0);
if (video.paused === false) {
video.pause();
} else {
video.play();
}
return false;
});
Версия Vanilla JavaScript:
var v = document.getElementById('videoid');
v.addEventListener(
'play',
function() {
v.play();
},
false);
v.onclick = function() {
if (v.paused) {
v.play();
} else {
v.pause();
}
return false;
};
Ответ 4
У меня была эта же проблема и она была решена, добавив обработчик событий для действия игры в дополнение к действию click. Я скрываю элементы управления во время игры, чтобы избежать проблемы с кнопкой паузы.
var v = document.getElementById('videoID');
v.addEventListener(
'play',
function() {
v.play();
},
false);
v.onclick = function() {
if (v.paused) {
v.play();
v.controls=null;
} else {
v.pause();
v.controls="controls";
}
};
Искривление все еще действует смешно, но, по крайней мере, путаница с контролем игры ушла. Надеюсь, это поможет.
У кого-нибудь есть решение?
Ответ 5
У меня было бесчисленное множество проблем, но в итоге появилось решение, которое работает.
В основном код ниже добавляет обработчик клика к видео, но игнорирует все клики в нижней части (0,82 произволен, но, похоже, работает на всех размерах).
$("video").click(function(e){
// get click position
var clickY = (e.pageY - $(this).offset().top);
var height = parseFloat( $(this).height() );
// avoids interference with controls
if(y > 0.82*height) return;
// toggles play / pause
this.paused ? this.play() : this.pause();
});
Ответ 6
Проблема заключается в том, что внутри элемента <video>
возникает внутреннее пузырение... поэтому, когда вы нажимаете кнопку "Воспроизвести", код запускается, а затем сама кнопка воспроизведения запускается: (
Я не мог найти простой (надежный) способ остановить прокрутку клика (логика говорит мне, что должен быть способ, но... он ускользает от меня прямо сейчас)
В любом случае решение, которое я нашел, состояло в том, чтобы поместить прозрачный <div>
по размеру видео, чтобы оно соответствовало тому, где отображаются элементы управления... поэтому, если вы нажмете на div, ваш script будет управлять воспроизведением/паузой но если пользователь нажимает на сами элементы управления, то элемент <video>
обрабатывает это для вас.
Образец ниже был рассчитан для моего видео, поэтому вам может потребоваться манипулировать размерами относительного <div>
, но он должен начать работу
<div id="vOverlay" style="position:relative; width:600px; height:300px; z-index:2;"></div>
<video style="position:relative; top:-300px; z-index:1;width:600px;height:340px;" width="600" height="409" id=videoPlayer controls="controls">
<source src="video.mp4" type="video/mp4">
</video>
<script>
var v = document.getElementById('videoPlayer');
var vv = document.getElementById('vOverlay');
<!-- Auto play, Half volume -->
v.play()
v.volume = 0.5;
v.firstChild.nodeValue = "Play";
<!-- Play, Pause -->
vv.addEventListener('click',function(e){
if (!v.paused) {
console.log("pause playback");
v.pause();
v.firstChild.nodeValue = 'Pause';
} else {
console.log("start playback")
v.play();
v.firstChild.nodeValue = 'Play';
}
});
</script>
Ответ 7
Следуя идее ios-lizard:
Я узнал, что элементы управления на видео имеют около 35 пикселей. Это то, что я сделал:
$(this).on("click", function(event) {
console.log("clicked");
var offset = $(this).offset();
var height = $(this).height();
var y = (event.pageY - offset.top - height) * -1;
if (y > 35) {
this.paused ? this.play() : this.pause();
}
});
В основном, он находит положение клика относительно элемента. Я умножил его на -1, чтобы сделать его положительным. Если значение было больше 35 (высота элементов управления), это означает, что пользователь нажимает в другом месте, кроме элементов управления. Поэтому мы приостанавливаем или воспроизводим видео.