我對this post的原始答案做了一些調整。基本上存在兩個問題:
1)。這條線(在afterShow
回調):
$(".fancybox-title").hide();
總是的afterShow
回調無論鼠標是hover
或不內側第一觸發。解決方法是驗證鼠標是否hovering
決定之前的fancybox容器隱藏的title
與否:
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
上顯示/隱藏title
的第一個.hover()
方法內移動了setTimeout
/clearTimeout
函數。
下面是完整的代碼(我已決定離開註釋掉以作記錄原碼):
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
見new JSFIDDLE
現在你可以使用通過畫廊導航或者, fancybox導航箭頭(點擊)或鍵盤箭頭。 title
將顯示,如果(如果只)鼠標的指針是hover
fancybox。
它似乎一直在Firefox,Chrome,Opera,Safari和(當然)IE瀏覽器上工作。
+1:我不得不承認這一點。你的答案比我的好得多。我並不樂意使用'setTimeout' /'clearTimeout',也沒有嗅探瀏覽器類型(IE),我希望OP會授予您賞金;) – JFK
我只是建議還要將'.ready()'方法綁定到'document' http://jsfiddle.net/ueS3V/ – JFK
雖然我最喜歡簡單的解決方案(並不是簡單的解決方法)。你得到了賞金和我的讚賞!恭喜。 –