桌面和移动平台的Twitter引导弹出触发器

tra*_*nte 19 javascript css popover twitter-bootstrap

单击默认弹出窗口触发器选项.但是我需要改变它来悬停.它可以这样做:

$("#popover").popover({ trigger: "hover" });
Run Code Online (Sandbox Code Playgroud)

但这对智能手机没有意义.用户无法读取悬停触发的弹出窗口.

对于我网站的" div "部分,我使用" visible-desktop "或"hidden-desktop".你可以提供一个很好的方法来触发popover与悬停 - 桌面触发弹出与点击智能手机/平板电脑.(我使用bootstrap 2.3.1)

相关: 在悬停时出现Bootstrap Popover/Disappear而不是Click

Ian*_*Ian 24

我最好的建议是检测是否有触摸事件.如果是这样("没有"悬停的能力),使用"点击"......如果没有,请使用"悬停".试试这个:

var is_touch_device = ("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch;
$("#popover").popover({
    trigger: is_touch_device ? "click" : "hover"
});
Run Code Online (Sandbox Code Playgroud)

(触摸检测来自Modernizr库)

使用JavaScript检测"触摸屏"设备的最佳方法是什么?

使用Javascript检测触摸屏设备

  • 认为`trigger:is_touch_device?“ click focus”:“ hover focus”`是一个很好的解决方案。需要触摸检测,这是一种非常干净的检测方法。 (2认同)

Gre*_*ass 13

如果您可以升级到Bootstrap 3+,您可以使用这个更干净的解决方案:

$('[data-toggle="popover"]').popover({trigger: 'hover click'});
Run Code Online (Sandbox Code Playgroud)

这将适用于悬停在桌面上并单击移动设备.

请参阅:http://getbootstrap.com/javascript/#popovers - "您可以传递多个触发器."

我不确定在使用Bootstrap 2之前是否可行,因为接受的答案是从2013年开始.因此,如果你可以将Bootstrap升级到版本3+,我会以这种方式重构它.

  • 你的权利可以,但不能正常工作的是`{trigger:'hover click focus'}`使用http://stackoverflow.com/a/15691248/1815624上提到的回答`{trigger:is_touch_device?"click focus":"hover focus"}`在我的案例中按预期工作 (2认同)
  • 示例 - > http://bl.ocks.org/CrandellWS/2e7d918cbae163ca9c1b使用`{trigger:is_touch_device?"焦点":"悬停焦点"}`因为`click`将popover留在视频预告片上.虽然我想我可能只是使用了`{trigger:'hover focus'}`但是悬停在触摸屏手机上看起来很奇怪.嘿,如果你能更好地分享Gist回购并告诉我,我会很乐意利用这个想法.您可能更喜欢`{trigger:is_touch_device?"焦点":"悬停点击"}` (2认同)

Gre*_*ass 5

还应该注意的是,twitter bootstrap 3 popover 现在一团糟。如果您一次只希望打开一个并且能够单击其他任何地方将其关闭,祝您好运 - 我发现这几乎是不可能的。他们的 github 页面上仍然存在错误。

我在我的生产应用程序中实现了https://github.com/sandywalker/webui-popover并且效果很好。

编辑(2020 年 4 月):工具提示/弹出窗口中出现了一个冠军:Tippy.js ( https://atomiks.github.io/tippyjs/ )。没有理由使用其他任何东西。向负责这个精彩库的开发人员干杯!