jQuery mouseleave - mouseenter просто работает в первом элементе - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь установить событие mouseenter и mouseleave в нескольких видео. Кажется, все работает идеально, видео воспроизводится, когда я mouseenter, и останавливается, когда mouseleave.

Однако, когда я добавляю более одного видео , просто воспроизводите первое видео. Я пытаюсь выяснить, чего не хватает, чего не нахожу, как это сделать.

Вот ссылка на кодовый блок: https://codepen.io/felixgonzalo/pen/poJoXRW

Мой код:

<div class="main-wrapper">

        <div class="video-container">
            <video id="video" class="video" controls class="border" controls="false" muted loop>
                <source src="https://www.errorerror.studio/wp-content/uploads/2020/01/ee.st-honesty-clip-00.mp4" preload="auto" type="video/mp4" autoplay />
            </video>
            <div class="overlay"></div>
        </div>

        <div class="video-container">
            <video id="video-2" class="video" controls class="border" controls="false" muted loop>
                <source src="https://www.errorerror.studio/wp-content/uploads/2020/01/ee.st-honesty-clip-00.mp4" preload="auto" type="video/mp4" autoplay />
            </video>
            <div class="overlay"></div>
        </div>

    </div>

jQuery

$('.video').prop('currentTime', 0)

        function Play() {
            $('.video').get(0).play();
        }
        function Stop() {
            $('.video').prop('currentTime', 0).get(0).pause();
        }

        $(document).ready(function(){
            $('.video-container').mouseenter(function(){
                $('.overlay', this).addClass("hide")
                Play();
            }).mouseleave(function(){
            $('.overlay', this).removeClass("hide")
            Stop();
        });
        });

Я также пытался сделать это в JS, но не получилось:


        var container = document.querySelector('.video-container');

        container.addEventListener('mouseleave', function() {
        this.querySelector('.overlay').classList.remove('hide');
        Stop();
        });

        container.addEventListener('mouseenter', function() {
        this.querySelector('.overlay').classList.add('hide');
        Play()
        });

Очень ценю любую помощь

1 Ответ

2 голосов
/ 07 февраля 2020

Ваша функция воспроизведения получает только первое видео, потому что вы указали индекс 0. Вам нужно передать текущий индекс видео, который вы зависли, чтобы запустить воспроизведение. РЕДАКТИРОВАТЬ: Рабочий код. Я сделал ваши функции с аргументом, который я устанавливаю для первых дочерних элементов видео элемента, вызывающего события мыши.

$('.video').prop('currentTime', 0)

$(document).ready(function() {
    $('.video-container').mouseenter(function() {
        $('.overlay', this).addClass("hide")
        $(this).children('.video')[0].play();
    }).mouseleave(function() {
        $('.overlay', this).removeClass("hide")
        $($(this).children('.video')[0]).prop('currentTime', 0)
        $(this).children('.video')[0].pause();
    });
});
...