我正在尝试使用Twitter Bootstrap Twipsy作为悬停工具提示,工具提示内有一个链接。
问题是,当鼠标光标离开元素时,工具提示消失,用户无法访问工具提示内的链接(查看演示,发现您无法将鼠标光标放在 twipsy 黑色气泡上它消失了)。
有没有办法解决它?
谢谢。
我正在尝试使用Twitter Bootstrap Twipsy作为悬停工具提示,工具提示内有一个链接。
问题是,当鼠标光标离开元素时,工具提示消失,用户无法访问工具提示内的链接(查看演示,发现您无法将鼠标光标放在 twipsy 黑色气泡上它消失了)。
有没有办法解决它?
谢谢。
我很难相信 bootstrap 的创建者之一告诉你这是不可能的,因为它肯定是 - 只需要一点点修补。
这是经过测试和工作的coffeescript和jquery中的解决方案:
timer = null
el = null
el2 = null
$('[rel=twipsy]').live
mouseenter: ->
$('.twipsy').remove()
$(this).twipsy('show')
, mouseleave: ->
el = $(this)
timer = setTimeout((->
el.twipsy('hide')
$('body .twipsy:last-child').remove()
), 10)
$('.twipsy').live
mouseenter: ->
clearTimeout(timer)
el2 = $(this)
el2.css 'z-index', 1000 if el2.hasClass 'in'
, mouseleave: ->
timer = setTimeout((->
el.twipsy('hide')
el2.css 'z-index', 1
$('body .twipsy:last-child').remove()
), 10)
如果您正在开发一个流量很大的应用程序,必须在旧浏览器或旧计算机上工作,或者非常依赖性能,我强烈建议您在这里推出自己的解决方案,因为使用大量实时处理程序不是真是个好主意。但是对于一些小/正常的东西,这很好用。如果您以特定方式悬停,我只发现了一个非常奇怪的小错误(尽管很少见)。重叠问题通过 z-index 操作解决。
如果你需要它是在 vanilla javascript 中,只需将它粘贴到http://coffeescript.org/的“try coffeescript”控制台中,它就会为你编译。
我认为你在这里真正需要的是 Twitter Popovers。
http://twitter.github.com/bootstrap/javascript.html#popovers
工具提示仅用于显示一些信息(这就是为什么它被称为工具“提示”)。其中,如果您需要用户交互,则需要使用 Popover。
现在在可用性点上可能会出现一个问题,如果我们可以使用工具提示悬停来实现相同的效果,为什么要增加用户点击。但这让用户可以控制他想要进行交互的时间。所以在我看来,它提高了可用性。您不能告诉用户在 2 秒(超时设置)内单击链接,否则它将消失。它不利于可用性
我很欣赏为这个答案所做的工作,虽然答案是正确的,但解决方案不是。
希望我已经说清楚了。
如果您阅读了我上面的评论并且似乎遇到了同样的问题,那么这对我有用。
您可以在文档中实际提到的大约 300 毫秒的动画上设置延迟。
您可以将 twipsy 的触发器设置为“手动”,然后将诸如“mouseenter”之类的事件绑定到使用计时器在关闭前等待几秒钟的函数。试试这个:
$(element).twipsy({
trigger:'manual'
});
$(element).bind('mouseover',function(){
$(element).twipsy('show');
if ( $(element).data('timerIsGoing') !== true ) {
$(element).data('timerIsGoing',true);
setTimeout(function(){
$(element).twipsy('hide');
}, 2000);
}
});
这将使用户有 2 秒钟的时间单击链接。
另外,我刚刚注意到您的问题,即附近可能有其他工具提示重叠。在鼠标悬停时您可以触发隐藏所有其他活动工具提示的自定义事件......只是一个想法
我确实遇到了同样的问题,但我同时加载了 jQuery.js 和 Prototype.js。阻止prototype.js 加载解决了这个问题。