2012-01-19 9 views
5

Tôi đang tìm cách mờ dần trong hình nền khi khách truy cập đến trang web nhưng không phải khi họ đã có hình ảnh đó trong bộ nhớ cache của họ. Một cái gì đó dọc theo dòng này:Làm điều gì đó nếu hình ảnh không được tải (jquery)

  1. Kiểm tra xem hình nền đã có trong bộ nhớ cache chưa.
  2. Nếu sau đó hiển thị nó.
  3. Nếu nó không phải là sau đó giấu nó và khi nó tải, mờ dần nó trong

Sử dụng jQuery tôi có thể giấu nó và sau đó mờ dần nó trong khi nó tải:.

$("#bkg img").hide(); 

$('#bkg img').load(function() { 
$(this).fadeIn(); 
}); 

Nhưng làm thế nào sao tôi làm điều này có điều kiện nên nó chỉ xảy ra nếu hình ảnh không phải là đã được lưu trong bộ nhớ cache?

Mọi thứ tôi đã tìm thấy trên diễn đàn sẽ kích hoạt khi hình ảnh tải xong. Làm thế nào tôi có thể làm cho nó kích hoạt vì nó không được tải?

Nhờ sự giúp đỡ, Lernz

@Sima Dựa trên mã từ that other thread Tôi đã thực hiện nó như xa như sau - nhưng nó dường như không được có bất kỳ tác dụng. Nếu bạn có thể nhìn thấy nơi tôi đang đi sai rằng sẽ thật tuyệt:

var storage = window.localStorage; 
if (!storage.cachedElements) { 
storage.cachedElements = ""; 
} 

function logCache(source) { 
if (storage.cachedElements.indexOf(source, 0) < 0) { 
    if (storage.cachedElements != "") 
    storage.cachedElements += ";"; 
     storage.cachedElements += source; 
    } 
} 

function cached(source) { 
    return (storage.cachedElements.indexOf(source, 0) >= 0); 
} 

var plImages; 

//On DOM Ready 
$(document).ready(function() { 
    plImages = $("#fundo-1 img"); 

    //log cached images 
    plImages.bind('load', function() { 
     logCache($(this).attr("src")); 
    }); 

    //display cached images 

    plImages.each(function() { 
    var source = $(this).attr("src") 
    if (!cached(source)) { 
     $(this).hide().fadeIn(); 
    } 
    }); 

}); 

Trả lời

2

Bạn có thể thử:

if(!$('#bkg img')[0].complete) { 
    $('#bkg img').hide().load(function() { 
     $(this).fadeIn(); 
    }); 
} 

https://developer.mozilla.org/en/DOM/HTMLImageElement

+0

Đừng quên '.hide()' trước tiên (bên trong 'if'). :) –

+1

Vâng, * chỉ * đã chỉnh sửa. Đăng nhập, ngày và tuần, mang vào thứ Sáu. – karim79

+0

wow có vẻ tuyệt vời :) – simekadam

0
$("#bkg img").hide();  
var imgCount=$("#bkg img").length; 
$('#bkg img').load(function(){ 
    if(!--imgCount){ 
     $('#bkg img').fadeIn(); 
      // your code after load 
    } else { 
     // your code onloading time 
    } 
}); 
0

Tôi nghĩ rằng không phải là dễ dàng vì có vẻ như, here phải là giải pháp ..

+0

Điều này thật tuyệt vời nhưng tôi đang gặp khó khăn khi làm tròn đầu. Tôi muốn hỏi liệu $ ("# bkg img") có tồn tại trong window.localStorage.cachedElements không? Hãy để tôi cung cấp cho điều này một ... – Learnz

+0

Được rồi, tôi không thực sự nhận được điều này. Có ai có thêm ý tưởng nào không? – Learnz

+1

Nope .. Trước hết bạn nên kiểm tra window.localStorage cho dù có chuỗi nguồn (theo giải pháp được liên kết) và sau đó nếu nó không được lưu trữ ở đó, bạn nên liên kết trên trình xử lý sự kiện tải với mã fadeIn, nếu không thì không làm gì cả để nó hiển thị bình thường. Không thực sự lưu trữ hình ảnh, chỉ có thông tin liên tục, cho dù hình ảnh đã được tải bất kỳ lúc nào trước đây (chúng tôi giả vờ rằng nếu có, nó phải nằm trong bộ nhớ cache ..) – simekadam