jquery - 导航悬停在桌面上,点击移动设备

标签 jquery modernizr

我有一个 JSFiddle here .

这是一个带有下拉菜单的引导导航。 我没有使用 Bootstrap 下拉菜单,而是使用我自己的下拉菜单。 下拉菜单需要在桌面上悬停时显示,在移动设备上单击时显示。

我有一个媒体查询,用于在桌面上悬停时显示下拉菜单。 我正在使用 Modernizr 添加移动尺寸的点击事件。 如果页面以该尺寸加载,则桌面和移动功能可以正常工作。如果页面以桌面尺寸加载,则悬停功能有效;如果页面以移动尺寸加载,则移动功能有效

如果我以桌面大小加载页面,然后将页面大小调整为移动大小,反之亦然,则导航不起作用。如果我以桌面大小加载,则悬停可以工作,但如果我然后将大小调整为移动大小,则单击不起作用工作正常。

在调整页面大小后,我真的不需要这个来工作,因为如果你在移动设备上,你就不会调整大小。谁能告诉我为什么会发生这种情况以及是否有解决方案?

$(function(){
    function doneResizing() {
        if(Modernizr.mq('screen and (max-width:767px)')) {
            $('.at-drop-down').on('click', function(e){
                e.preventDefault();
                $(this).next($('.sub-menu')).slideToggle();
            })
        }
    }
    var id;
    $(window).resize(function() {
        clearTimeout(id);
        id = setTimeout(doneResizing, 0);
    });
    doneResizing();
});

最佳答案

我认为问题是因为,当您调整大小时,doneResizing() 方法会被多次调用,并且它将多个单击事件处理程序附加到下拉列表。

你可以尝试这个:

$(function(){

    $('.at-drop-down').on('click', function(e){
        if(Modernizr.mq('screen and (max-width:767px)')) {
            e.preventDefault();
            $(this).next($('.sub-menu')).slideToggle();
        }
    })

});

无需调整大小事件,并且单击事件仅注册一次。

演示:https://jsfiddle.net/alan0xd7/cwwaqp5k/45/

更新:

悬停问题:在“移动模式”下,如果您单击某些内容,然后将大小调整为“完整模式”,悬停将停止工作。这是因为 slideToggle() 设置 CSS 样式来隐藏和显示元素。您可以执行以下操作来删除它们:

$(window).resize(function() {
    $('.sub-menu').attr("style", "");
});

演示:https://jsfiddle.net/alan0xd7/cwwaqp5k/46/

关于jquery - 导航悬停在桌面上,点击移动设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501264/

相关文章:

jquery animate,无法让它工作

javascript - 无法使用 ie6 和某些移动设备处理 Modernizr.backgroundsize

javascript - Modernizr 检查以检测 firefox

javascript - 如何删除文本选择中的子元素

jquery - 一起使用 jQuery Mobile 和 bootstrap 时页脚无法正常工作

javascript - jQuery 禁用数字类型的文本框输入

javascript - Yepnope & Modernizr screen.width 条件

javascript - 浏览复杂的 JSON

JavaScript 分割错误 : Uncaught TypeError: Cannot read property 'split' of undefined

javascript - Modernizr 将所有 _self 目标链接转换为 _blank