这是popover的Html,用于在有人将鼠标悬停在个人资料缩略图上时显示用户个人资料的摘要。
<div class="user-avatar" style="background-image: url({{ $chat->from->small_avatar }}); " data-container="body" data-toggle="popover" data-placement="right" data-html="true" data-content="<div class='group-chat-popover'>
<div class='popover-header'>
<div class='chat-avatar' style='background-image:url({{ $chat->from->small_avatar }})'></div>
<div class='header-description'>
<p class='user-name'>{{ $chat->from->full_name }}</p>
<p class='user-bio'>{{ $chat->from->about }}</p>
</div>
</div>
<div class='user-activity'>
<div class='activity'>
<p class='activity-category'>Reputation</p>
<p class='activity-count'>{{ $chat->from->total_points }}</p></div>
<div class='activity'>
<p class='activity-category'>Submissions</p>
<p class='activity-count'>{{ $chat->from->approved_tutorials->count() }}</p></div>
<div class='activity'>
<p class='activity-category'>Upvotes</p>
<p class='activity-count'>{{ $chat->from->votes->count() }}</p></div>
</div>
<div class='popover-footer'>
<a href='{{ $chat->from->profile_link }}' class='btn btn-sm btn-select'>Open profile</a>
<a href='{{ $chat->from->chat_link }}' class='btn btn-sm btn-primary'>Private Chat</a>
</div>
</div>">
</div>
这是我编写的用于触发和关闭弹出窗口的代码。我也在这里使用bootstrap popovers。
var timer;
$(".user-avatar").popover({
trigger: "manual",
animation: false
})
.on("mouseenter", function(){
var self = $(this);
timer = setTimeout(function(){
self.popover("show");
}, 1000);
})
.on("mouseleave", function () {
clearTimeout(timer);
$(".popover").on("mouseleave", function () {
$(this).popover('hide');
});
setTimeout(function () {
if (!$(".popover:hover").length) {
$(this).popover("hide");
}
}, 30);
});
问题是当我鼠标输入缩略图但是直接鼠标移动缩略图时我无法隐藏弹出窗口(没有鼠标拖动弹出窗口)。
我想要以下行为:
当我鼠标输入缩略图时,弹出显示。 当我鼠标进入弹出窗口时,弹出窗口保持打开状态。 当我将popover鼠标移开时,Popover会隐藏。 当我鼠标移动缩略图时,Popover会隐藏(不会转到弹出窗口)。
我无法达到最后一点!
答案 0 :(得分:0)
当鼠标离开元素时你应该设置一个计时器,当鼠标进入弹出框时清除它。 像这样:
var timer;
$(".user-avatar").popover({
trigger: "manual",
animation: false
}).on("mouseenter", function(){
$(this).popover("show");
}).on("mouseleave", function () {
var self = $(this);
timer = setTimeout(function(){ // You may want to keep a reference to the time of each element.
self.popover("hide");
}, 1000);
});
$(".popover").on("mouseenter", function(){
clearTimer(timer);
}).on("mouseleave", function () {
$(this).popover("hide"); // I'm not sure this will work, you may have to keep a reference to the element that owns this popover.
});