【问题标题】:Twitter Bootstrap: Dropdown Menus Hover for Desktop, Click for Tablets/Phones?Twitter Bootstrap:下拉菜单悬停在桌面上,点击平板电脑/手机?
【发布时间】:2012-06-20 20:01:15
【问题描述】:

似乎有很多关于如何将 Twitter Bootstrap 的下拉菜单从点击显示更改为悬停显示的问题/答案。 Bootstrap 的构建者有充分的理由使用点击而不是悬停——悬停在大多数平板电脑和手机上都不起作用。然而,我使用 Bootstrap 的原因之一是它的响应特性。我想要一个可以在台式机、平板电脑和手机上查看的网站。尽管平板电脑和手机需要单击以获取下拉菜单,但这不是台式机的预期行为。我希望我的网站具有响应能力,但不能以必须重新培训用户为代价!

有没有办法为台式机提供悬停下拉菜单以及为平板电脑和手机提供点击下拉菜单?

【问题讨论】:

    标签: twitter drop-down-menu click hover twitter-bootstrap


    【解决方案1】:

    我创建了一个插件(进行了一些改进,但它确实可以按原样工作)允许下拉菜单在悬停时工作,但它不会干扰 Twitter Bootstrap 的点击事件,所以你可以安全地绑定两者,本质上表示如果有鼠标,它会在悬停时激活,但如果没有鼠标(即平板电脑上的触摸屏),它仍然会在单击时激活。

    我的插件托管在 GitHub 上:https://github.com/CWSpear/twitter-bootstrap-hover-dropdown

    它通过显式调用来工作,但我将在不久的将来调整代码以使用数据属性。

    【讨论】:

    • CWSpear:您的插件非常好用,而且非常易于安装/使用。真的很感谢你分享它。谢谢! 〜苏珊
    【解决方案2】:

    您可以使用“响应式实用程序类”

    http://twitter.github.com/bootstrap/scaffolding.html在页面底部

    【讨论】:

    • 实际上,通过使用响应式实用程序类,我似乎必须拥有两个单独版本的菜单。一个会显示手机/平板电脑,一个会显示桌面。理想情况下,我只想要一个菜单​​。
    • @TonyaAbna 你可以这样做jsfiddle.net/baptme/gRVUq/1 但你需要一些 jQuery 来关闭第二次点击的下拉菜单。
    • baptme,我不确定我是否理解您的回答。我看到您如何使下拉菜单在悬停而不是单击时工作,但我正在寻找一种可以悬停桌面并单击手机/平板电脑的解决方案。我在你的演示中遗漏了什么吗?空点击功能有什么作用?
    • @TonyaAbna 默认情况下,下拉菜单通过单击工作,因此移动设备无需更改。但是通过添加 css :hover 你失去了在移动设备上关闭下拉菜单的能力(在 ipad 上测试)。空函数什么都不做。
    【解决方案3】:

    我正在寻找这个。而且我找到了更好的解决方案(我认为)。 我们可以使用很棒的 Modernizr.js 库轻松做到这一点。 我们可以通过下面的函数来检测触摸屏设备。

    function is_touch_device() {
      return !!('ontouchstart' in window);
    }
    

    然后我们可以通过 Javascript 动态禁用超链接中的 URL,方法是将位置更改为“#”或阻止父菜单项的默认操作。 最终代码如下。

    $(document).ready(function() { 
    
        /* If mobile browser, prevent click on parent nav item from redirecting to URL */
        if(is_touch_device()) { 
    
            $('#mainmenu li > ul').each(function (index, ev) {
                /* Option 1: Use this to modify the href on the <a> to # */
                $(ev).prev('a').attr('href' ,'#');  
    
                /* OR Option 2: Use this to keep the href on the <a> intact but prevent the default action */
                $(ev).prev('a').click(function(event) {
                    event.preventDefault();
                });
            });
        }
    
    });
    

    更多详情可以看this link 我相信有人会投票给我 :-)

    谢谢

    【讨论】:

    • 您的解决方案似乎与 Modernizr.js 库没有太大关系......似乎它也几乎可以逐字使用 jQuery。 (编辑:库名称中的错字)
    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多