结合jquery函数 - on()hover/mouseenter/mouseleave

Nic*_*ris 32 javascript jquery

我有一系列元素(让我们称之为'.my-elements') - 一些文件准备加载,而其他元素稍后通过分页脚本加载.

我想根据鼠标是否在这些元素上来设置变量.下面的代码有效,但我怀疑有更好的方法......我可以这样做,所以我只需要引用一次DOM吗?

$(document).on('mouseenter','.my-elements', function(){
    mouse_is_inside = true;
});

$(document).on('mouseleave','.my-elements', function(){
    mouse_is_inside = false;
});
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jon*_*ski 92

您可以将两者绑定在一起并检查event.type:

$(document).on('mouseenter mouseleave', '.my-elements', function (ev) {
    mouse_is_inside = ev.type === 'mouseenter';
});
Run Code Online (Sandbox Code Playgroud)

或者,如果要将它们分开,请使用.on另一种采用事件映射的语法:

$(document).on({
    mouseenter: function () {
        mouse_is_inside = true;
    },

    mouseleave: function () {
        mouse_is_inside = false;
    }
}, '.my-elements');
Run Code Online (Sandbox Code Playgroud)


Der*_*ker 6

查看jQuery hover,它与以下内容相同:

$(selector).mouseenter(handlerIn).mouseleave(handlerOut);
Run Code Online (Sandbox Code Playgroud)

更新:我刚刚意识到你需要通过on()方法来持久化事件.在这种情况下,您可以使用如下事件映射:

.on({
    mouseenter: function() {
        console.log('enter');
    },
    mouseleave: function() {
        console.log('bye!');
    }
})
Run Code Online (Sandbox Code Playgroud)


DC_*_*DC_ 5

几乎所有的jQuery方法都返回对象,因此您可以将它们链接在一起:

$(document).on('mouseenter','.my-elements', function(){
    mouse_is_inside = true;
}).on('mouseleave','.my-elements', function(){
    mouse_is_inside = false;
});
Run Code Online (Sandbox Code Playgroud)