我对这篇文章的原始答案做了一些调整。
基本上有两个问题:
1)。这一行(在afterShow
回调中):
$(".fancybox-title").hide();
afterShow
无论鼠标是否存在,总是在回调中首先触发hover
。解决方法是在hovering
决定隐藏title
或不隐藏鼠标之前验证鼠标是否是fancybox容器:
if ( !$('.fancybox-wrap:hover').length ) {
// mouse is not hover
$(".fancybox-title").hide();
}
但是,:hover
伪类在 IE8 及更低版本中似乎不起作用。由于我们确实关心跨浏览器兼容性,因此我们需要为这些浏览器提供额外的解决方法,因此我们将添加此变量
var isIE = navigator.userAgent.match(/msie [6-8]/i);
并验证所有浏览器:
if ( !isIE ) {
if ( !$(".fancybox-wrap:hover").length ) {
// mouse is not hover
$(".fancybox-title").hide();
}
} else {
$(".fancybox-title").hide();
$(".fancybox-wrap").wrap("<a id='fancyhover' class='fancyhover' />");
}
请注意,我们添加了元素#fancyhover.fancyhover
(包装了 fancybox 包装器),因此我们可以播放 IE8 的切换类解决方法-
2)。hover
我在第二种方法中验证鼠标状态.hover()
,这是多余的(并且有问题和令人困惑),所以我在第一种方法中移动了setTimeout
/函数,用于显示/隐藏on mouse 。clearTimeout
.hover()
title
hover
这是完整的代码(我决定将原始代码注释掉以用于文档目的):
var isIE = navigator.userAgent.match(/msie [6-8]/i);
jQuery(document).ready(function ($) {
$(".fancybox").fancybox({
helpers: {
title: {
type: "over"
}
},
afterShow: function () {
if ( !isIE ) {
if ( !$(".fancybox-wrap:hover").length ) {
// mouse is not hover
$(".fancybox-title").hide();
}
} else {
$(".fancybox-title").hide();
$(".fancybox-wrap").wrap("<a id='fancyhover' class='fancyhover' />");
}
// shows/hides title on hover
$(".fancybox-wrap").hover(function () {
//$(".fancybox-title").stop(true,true).slideDown(200);
if ( isIE ) {
$("#fancyhover").toggleClass("fancyhover");
if ( !$("#fancyhover").hasClass("fancyhover") ) {
$(".fancybox-title").hide();
}
}
var $fancyWrap = $(this),
$fancyTitle = $fancyWrap.find(".fancybox-title");
$fancyWrap.data("timeout", setTimeout(function () {
$fancyTitle.stop(true, true).slideDown(100);
}, 200));
}, function () {
//$(".fancybox-title").stop(true, true).slideUp(200);
clearTimeout($(this).data("timeout"));
$(this).find(".fancybox-title")
.stop(true, true)
.slideUp(100);
});
/*
// detects if mouse is already hover
$(".fancybox-outer a, .fancybox-outer img").hover(function () {
$(this).data('timeout', setTimeout(function () {
$(".fancybox-title").stop(true, true).slideDown(200);
}, 100));
}, function () {
clearTimeout($(this).data('timeout'));
});
*/
}
});
}); // ready
查看新的 JSFIDDLE
现在您可以使用fancybox 导航箭头(单击时)或键盘箭头来浏览图库。title
如果(如果只有)鼠标的指针是花式框,就会hover
出现。
它似乎在 Firefox、Chrome、Opera、Safari 和(当然)IE 中始终如一地工作。