2010-07-12 41 views
5

Dự án CMS của tôi có màn hình đăng nhập web 2.0 phong cách mờ dần trên màn hình bằng javascript. Làm thế nào mà mặc dù tôi đã thực hiện 120% chắc chắn rằng hình ảnh được tải trước (tôi đã sử dụng màn hình tài nguyên trong các công cụ phát triển), chúng vẫn mất một giây để hiển thị khi màn hình đăng nhập của tôi xuất hiện. Nó hoàn toàn phá hủy fanciness! Hãy xem:Tại sao tải trước hình ảnh không hiệu quả?

http://www.dahwan.info/Melior (liên kết bị hỏng)

Khi bạn nhấp vào đăng nhập, màn hình được cho là mờ dần để tối sử dụng một hình ảnh 75% alpha 1px png. Mặc dù hình ảnh được tải sẵn, nó không hiển thị cho đến sau khi hoạt ảnh được thực hiện. Tuy nhiên, nếu bạn nhấp vào hủy và đăng nhập lại, hoạt ảnh sẽ diễn ra suôn sẻ và hoàn hảo.

Có ai có thể nghĩ ra giải pháp cho vấn đề này không? Tôi đang dùng nó với phần còn lại của GUI của CMS. Nó giống như không có hình ảnh tải trước những gì bao giờ hết.

Cám ơn câu trả lời

EDIT: À đúng rồi, tôi đang phát triển CMS này cho 5.0.375.99 Google Chrome, thêm khả năng tương thích trình duyệt đa sau. Xin lỗi vì đã thoát khỏi điều đó ra

+2

Có thể đáng nói đến (các) trình duyệt mà bạn đã gặp phải sự cố. Tôi vừa thử nó trong Firefox 3.6 và có vẻ như nó hoạt động chính xác. – Jake

+0

Liên kết gặp sự cố với tab trình duyệt của tôi (IE 8 - Vista 32bit) – ZippyV

+1

Xin lỗi vì đã trả lời câu trả lời nhưng bạn đã cân nhắc không sử dụng hình ảnh? Tôi đã sử dụng lớp phủ Công cụ jQuery (http://flowplayer.org/tools/demos/overlay/custom-effect.html) với thành công trong quá khứ. Nếu bạn muốn tự mình làm, bạn có thể chỉ muốn sử dụng hình nền rgba cố định. Đối với hồ sơ, màn hình hoạt động tốt cho tôi. –

Trả lời

2

Tôi đã đưa ra giải pháp cho vấn đề của mình. Bây giờ tôi đã thử nghiệm điều này trong ba trình duyệt trên hai máy tính khác nhau với kết quả hoàn hảo. Tóm lại, trong chức năng tải trước hình ảnh của tôi trong javascript, tôi đã thêm từng hình ảnh vào DOM trong thẻ Div vô hình.

$('#img_preload').append($('<img />').attr('src', img.src)); 

Hình ảnh hiện được thêm vào bộ nhớ trong máy tính cấp thấp của tôi, chúng xuất hiện ngay lập tức khi CMS của tôi cần chúng.

Cảm ơn nhận xét của bạn :)

0

Chuỗi giao diện người dùng chỉ có thể quản lý một tác vụ cùng một lúc - nó sẽ thực thi javascript hoặc cập nhật giao diện người dùng. Nếu có nhiều phân tích cú pháp javascript/thực thi trước khi mã tải trước hình ảnh, điều đó có thể gây ra sự chậm trễ.

Một đề xuất khác là vô hiệu hóa khả năng nhấp trên liên kết đăng nhập cho đến sau khi hình ảnh được phát hiện trên trang.

Để làm như vậy là khá đơn giản:
chức năng disableBtn (el) {var
btn = document.getElementById (el);
var btnId = btn.id;
btn.disabled = true;
}

Để bật lại, hãy đặt btn.disabled = false (sau khi phát hiện thấy hình ảnh của bạn đã được thêm vào DOM).

+0

Tôi đã loại trừ hình ảnh đang được tải chậm như một nguyên nhân cho sự cố của mình, như trong một số trường hợp tôi đã kiểm tra giám sát tài nguyên trong vài phút và thậm chí nhìn thấy hình ảnh trong màn hình trước khi nhấp vào nút đăng nhập. Nhưng cảm ơn bạn đã trả lời – Hubro

1

Bạn cũng có thể tải trước chúng vào một mảng. Vấn đề của bạn có thể được gây ra bởi những gì được gọi là "thu gom rác thải". Đây là nơi trình duyệt tìm kiếm các đối tượng đang tiêu thụ bộ nhớ mà không còn có thể hiện trên màn hình và không được tham chiếu bởi bất kỳ thứ gì khác trong bộ nhớ.

Nếu bạn tải trước hình ảnh vào độ tuổi trên web, chúng sẽ được tải vào bộ nhớ cache. Vì vậy, họ vẫn nên xuất hiện lại khi được tham chiếu lại. Tuy nhiên, hình ảnh cũng có thể biến mất nếu hết hạn bộ nhớ cache không được đặt trong một khoảng thời gian đủ dài cho các loại tệp này.

Sự cố của bạn cũng có thể do trình duyệt cụ thể .... Tôi nhận thấy rằng luôn luôn tốt nhất là tạo "neo" cho nội dung được tải trước bằng cách đặt chúng vào mảng hình ảnh và sau đó sử dụng mảng để gọi hình ảnh khi cần thay vì URL hình ảnh (URI).

Đây là một bài viết nhanh và bẩn bao gồm chủ đề này.

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5214317.html

+0

Tải hình ảnh vào một mảng là phương pháp tôi đã sử dụng. Tôi xin lỗi lần nữa vì đã cung cấp rất ít thông tin. Dù sao, tôi đã giải quyết được vấn đề và trả lời với nó :) – Hubro

+0

Cool! Tôi vui vì nó hoạt động tốt.Tuy nhiên, cách bạn đang thực sự sẽ chiếm không gian trên sân khấu (trang), trong khi tôi sẽ giữ nó trên mặt phẳng thanh tao (bộ nhớ) mà không có bất kỳ sự hiện diện vật lý nào trên sân khấu hoặc cơ hội di chuyển nội dung không yêu cầu bất kỳ CSS nào được định nghĩa. – exoboy

2

Một thông tin hữu ích về vấn đề này:

Giải pháp Codemonkey làm việc bởi vì, bằng cách đặt những hình ảnh trong một div ẩn, trình duyệt phải giữ những hình ảnh trong bộ nhớ và sẵn sàng cho một có thể thay đổi khả năng hiển thị của div. Nếu người dùng cần thay đổi chế độ hiển thị của div từ ẩn thành chặn, nó phải được thực hiện ngay lập tức. Đây là lý do tại sao chỉ cần tải tất cả các hình ảnh vào một mảng không hoạt động đúng.

+1

Cũng bằng cách sử dụng một mảng để lưu trữ hình ảnh ojects đã làm việc cho tôi trong nhiều năm. Vì vậy, hãy cố gắng kiềm chế không đưa ra nhận xét rằng bạn không chắc chắn 100% .... – exoboy

Các vấn đề liên quan