javascript - jQuery mouseleave - mouseenter 仅在第一个元素中工作

标签 javascript jquery mouseevent dom-events

我正在努力尝试在多个视频中设置 mouseentermouseleave 事件。一切看起来都很完美,当我 mouseenter 时视频播放,当 mouseleave 时视频停止。

但是,当我添加多个视频时,仅播放第一个视频。我试图找出它缺少什么,我找不到方法来做到这一点。

这里是 codepen 的链接: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()
        });

非常感谢任何帮助

最佳答案

您的函数 play 仅获取第一个视频,因为您指定了 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();
    });
});

关于javascript - jQuery mouseleave - mouseenter 仅在第一个元素中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110276/

相关文章:

c# - 在后面的代码中访问 ViewModel 是否总是违反 MVVM 模式?

javascript - 如何为单个 multireducer 子切片提供初始状态

javascript - 如何在 LinkedIn 应用程序中打开 LinkedIn 共享文章链接

vb.net - 如何将 Handsontable 保存到数据库

javascript - 单击后恢复 mouseout 上的 div 内容

Android:跟踪鼠标指针移动

javascript - 在 Javascript 中模拟 MIDI 节拍时钟

javascript - 如果React.js是MVC中的V,那么其他字母是什么?

jquery - 如何 Jquery 仅显示此表结构中的特定 td?

javascript - jquery 与动态 div 绑定(bind)