使用悬停触发器显示弹出窗口可以正常工作。
使用点击触发器显示弹出窗口正常。
现在,如何在触发图像悬停时显示弹出窗口,但是如果用户点击图像,取消悬停并启动单击切换?换句话说,悬停显示弹出窗口并单击弹出窗口的“引脚”。
HTML非常标准:
<li>User<span class="glyphicon glyphicon-user" rel="popover" data-trigger="click" data-container="body" data-placement="auto left" data-content="Body Text" data-original-title="Title Text"></span></li>
popover初始化,更无聊:
$(function () {
$("[rel=popover]").popover();
});
从我到目前为止看到的情况来看,该解决方案似乎是一组很好的复杂popover('show')
,popover('hide')
和popover('toggle')
调用,但是我的javascript / jQuery-foo不能胜任这项任务。
编辑:
使用@hajpoj提供的代码作为基础,我添加了一个函数来监听hidden.bs.popover
事件,尝试在触发click事件后重新启用mouseenter和mouseleave事件,但是它确实“悬停”再次发挥作用,它会杀死点击......
var $btn2 = $('#btn2');
var enterShow = function() {
$btn2.popover('show');
};
var exitHide = function() {
$btn2.popover('hide');
}
$btn2.popover({trigger: 'manual'})
.on('mouseenter', enterShow)
.on('mouseleave', exitHide)
.one('click', function() {
$btn2.off('mouseenter', enterShow)
.off('mouseleave', exitHide)
.on('click', function() {
$btn2.popover('toggle');
});
});
$('#btn2').on('hidden.bs.popover', function () {
$btn2.on('mouseenter', enterShow)
.on('mouseleave', exitHide)
});
答案 0 :(得分:17)
修改强>
根据您的评论提供更新的解决方案。它不会处于“单击”状态,而是返回到悬停状态。
jsfiddle:http://jsfiddle.net/hajpoj/JJQS9/15/
HTML:
<a href="#" id="btn2" class="btn btn-lg btn-danger" data-toggle="popover" title="" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="A Title">Click to toggle popover</a>
JS:
var $btn2 = $('#btn2');
$btn2.data('state', 'hover');
var enterShow = function () {
if ($btn2.data('state') === 'hover') {
$btn2.popover('show');
}
};
var exitHide = function () {
if ($btn2.data('state') === 'hover') {
$btn2.popover('hide');
}
};
var clickToggle = function () {
if ($btn2.data('state') === 'hover') {
$btn2.data('state', 'pinned');
} else {
$btn2.data('state', 'hover')
$btn.popover('hover');
}
};
$btn2.popover({trigger: 'manual'})
.on('mouseenter', enterShow)
.on('mouseleave', exitHide)
.on('click', clickToggle);
<强>旧强>
我相信这就是你要找的东西:
HTML:
<a href="#" id="btn2" class="btn btn-lg btn-danger" data-toggle="popover" title="" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="A Title">Click to toggle popover</a>
JS:
var $btn2 = $('#btn2');
var enterShow = function() {
$btn2.popover('show');
};
var exitHide = function() {
$btn2.popover('hide');
}
$btn2.popover({trigger: 'manual'})
.on('mouseenter', enterShow)
.on('mouseleave', exitHide)
.one('click', function() {
$btn2.off('mouseenter', enterShow)
.off('mouseleave', exitHide)
.on('click', function() {
$btn2.popover('toggle');
});
});
基本上你手动弹出/关闭mouseenter
和mouseleave
事件上的弹出窗口,但是一旦有人第一次点击弹出框,你就删除那些事件处理程序,并添加一个新的处理程序在切换弹出窗口的click
事件上。
修改强> 一个替代的js代码。更简单的代码,但使用它时会有一个小的视觉效果: http://jsfiddle.net/hajpoj/r3Ckt/1/
var $btn2 = $('#btn2');
$btn2.popover({trigger: 'hover'})
.one('click', function() {
$btn2.popover('destroy')
.popover({ trigger: 'click'})
.popover('show');
});
答案 1 :(得分:5)
非常简单,将hover
添加到data-trigger
,如下所示:
<span rel="popover" data-trigger="hover click" data-container="body" data-placement="auto" data-content="Body Text"></span>
答案 2 :(得分:4)
这是一个混合弹出窗口/工具提示,可以为您提供两种选项的功能,点击和悬停时切换:
HTML:
<button id="tip1" type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title='this text!'>What's hidden?</button>
JS:
var $tip1 = $('#tip1');
$tip1.tooltip({trigger: 'hover'})
.on('click', function() {
$tip1.tooltip('toggle');
});
答案 3 :(得分:1)
这是我使用Bootstrap和JQuery完成悬停/引脚功能的方式:
$(function () {
var clicked = false;
var onLeave = function() {
if (!clicked) { $(this).popover('hide'); }
};
var onEnter = function () {
if (!clicked) { $(this).popover('show'); }
};
var clickToggle = function() {
if (clicked) { $(this).popover('hide'); }
clicked = !clicked;
}
$('.popover-div-class').popover({ trigger: "manual"})
.on('mouseenter', onEnter)
.on('mouseleave', onLeave)
.on('click', clickToggle);
});
我不确定它是否适用于所有情况,但它在我的工作中有效。对@hajpoj和@Trevor的灵感大声呐喊。
JSFiddle:https://jsfiddle.net/5m2ob3yf/(还没有工作,但你可以得到要点)。