2010-11-17 9 views
7

Tôi đang làm việc trên trình tải trước hình ảnh sẽ tải trước tất cả hình ảnh trên một trang. Cách tiếp cận của tôi là như sau:jQuery - cách nhận/đọc thuộc tính css trên: hover pseudo class

onDomReady, lặp qua $("*") // đi qua tất cả các yếu tố khi DOM đã sẵn sàng

  • nếu $(this).tagName.toLowerCase() == 'img', đọc src thuộc tính, và tải trước hình ảnh mà
  • else if $(this).css("background-image") != "none", đọc nền chống đỡ hình ảnh và tải trước hình ảnh đó

Vấn đề của tôi là cách tiếp cận này không nhận được trên: lớp di chuột, thường là hình ảnh cần o được tải trước.

Điều tôi muốn làm là có thể, trong khi lặp qua tất cả các phần tử, kiểm tra sự tồn tại của lớp giả: hover và sau đó kiểm tra sự tồn tại của thuộc tính "background-image" trên lớp đó.

Tôi thực sự muốn gắn bó với phương pháp này, vì nó a) cho phép tôi không phải chỉ định rõ ràng từng hình ảnh tôi muốn tải trước và b) quản lý các đường dẫn tương đối trong CSS, như đọc thuộc tính "background-image" mang lại cho tôi đường dẫn tương đối so với trang.

Vì vậy, câu hỏi của tôi là:

là là có thể, sử dụng jQuery, để đọc các thuộc tính CSS trên: hover lớp giả cho một yếu tố? Nếu không, bất kỳ đề xuất?

Cảm ơn!

+0

Bạn có bao giờ có thể xác định: hình nền di chuột qua JS hay bạn đã phải sử dụng một số cách giải quyết khác không? – JGarrido

Trả lời

3

Điều này sẽ rất chuyên sâu khi tải trang để tìm kiếm qua tất cả hình ảnh DOM/CSS ... có thể không phải là ý tưởng hay trên trang web công cộng. Một lựa chọn tốt là sử dụng các hình ảnh sprites (http://www.google.com/images/nav_logo26.png) và định vị chúng bằng CSS

+0

+1 Sprites là một gợi ý tuyệt vời cho vấn đề này. – lonesomeday

+0

Trong trường hợp này, tôi không thể sử dụng sprites, vì trang web tôi đang làm việc là dành cho danh mục đầu tư của một nghệ sĩ và rất chuyên sâu về giao diện người dùng với hình ảnh được hiển thị. Tôi đồng ý rằng nó sẽ làm chậm thời gian tải xuống, nhưng khách hàng khẳng định rằng tất cả các hình ảnh được tải sẵn trước khi người dùng có thể tương tác với nó. Cảm ơn gợi ý, nhưng nó sẽ không hoạt động trong trường hợp này :-( –

0

Có vẻ như các sprites là giải pháp phù hợp cho vấn đề này. Nhưng nếu chúng không thể được thực hiện vì một lý do nào đó, những gì bạn muốn làm là truy cập bộ sưu tập document.styleSheets để tìm kiếm các quy tắc với: hover trong chúng. This page sẽ giúp bạn bắt đầu.

+0

Đây là con đường tôi đã cố gắng thực hiện, tuy nhiên, là một mọt sách, tôi muốn xây dựng thứ gì đó có thể sử dụng lại trong tương lai. vấn đề với phân tích cú pháp tệp CSS là chúng tôi có nhiều tệp CSS nằm trong các thư mục khác nhau vì lý do tôi không thể giải thích trong 500 ký tự. Do đó, tôi sẽ phải thực hiện một số logic đường dẫn tương đối để có được đường dẫn tương đối so với trang Vấn đề này đã được giải quyết bằng cách sử dụng cách tiếp cận $ (this) .css ("background-image"), vì điều này đã trả về URL của hình ảnh liên quan đến trang. Vì vậy, cảm ơn, nhưng tôi vẫn còn - tôi có thể đọc: các đạo cụ di chuột không? –