我有一個腳本,當您將鼠標懸停在其上時,可以在縮覽圖上動態添加完整圖像。我還給出了完整的圖像CSS:懸停樣式,以使它們展開到更大的寬度(通常它們被限制在縮略圖的尺寸範圍內)。如果圖像快速加載或緩存,但是如果完整圖像需要很長時間才能加載,並且在加載時不移動鼠標,則此功能正常工作,但一旦出現圖像,它通常會保留在縮略圖寬度(非:懸停樣式),直到您再次移動鼠標。我在我嘗試過的所有瀏覽器中都看到了這種行爲。我想知道這是否是一個錯誤,以及是否有解決或解決此問題的方法。如何確保CSS:懸停適用於動態添加元素
可能值得注意的是,我也嘗試在Javascript中使用.on('mouseenter')
做同樣的事情,並且遇到了同樣的問題。
由於問題的性質,可能很難重現,特別是如果您有快速連接。我選擇了來自維基百科的一張很大的照片來演示,但爲了使它工作,您可能必須將其更改爲特別大或來自緩慢域的內容。另外請注意,您可能必須清除緩存才能繼續重試。
如果仍然無法複製,則可以在致電anchor.show()
之前向fullimage.load
添加一個仿真延遲。
HTML:
<img id="image" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Cairo_International_Stadium.jpg/220px-Cairo_International_Stadium.jpg" />
CSS:
.kiyuras-image {
position: absolute;
top: 8px;
left: 8px;
max-width: 220px;
}
.kiyuras-image:hover {
max-width: 400px;
}
JS:
$(function() {
var fullimageurl = 'http://upload.wikimedia.org/wikipedia/commons/3/32/Cairo_International_Stadium.jpg';
var fullimage = $('<img/>')
.addClass('kiyuras-image')
.load(function() {
anchor.show();
});
var anchor = $('<a/>').hide().append(fullimage);
$('body').prepend(anchor);
$("#image").on('mouseenter', function() {
fullimage.attr('src',fullimageurl);
$(this).off('mouseenter');
});
});
Updated JS Bin with 1.5-second delay added (Hopefully makes issue clearer)
再次重現該問題包括清除大圖像的緩存,然後將鼠標懸停在原始圖像上以初始加載大圖像,然後在加載時不移動鼠標。預期的行爲是大圖像在最終加載時適當地使用:hover僞類。問題我發現加載時間超過〜0.75秒的時間不會發生:直到您稍微鬆開鼠標爲止。
編輯:請參閱我對@ LucaFagioli的回答,瞭解我的用例的更多詳細信息。
編輯,續集:我以爲我已經這樣做了,但我只是試圖在Firefox中重現這個問題,我不能。也許這是一個Chrome錯誤?
只是一個側面說明:不是使用.on(),而是使用.off()再次解除綁定,您可以使用.one()代替。見http://api.jquery.com/one/ – xec
@xec,酷,謝謝你的提示! – jrajav
建立了一個jsfiddle,人們會更清楚地看到你的問題 –