2009-07-07 33 views
89

Trong trang của tôi, tôi có một bó (khoảng 30) nút dom sẽ được thêm vào vô hình và mờ dần khi chúng được nạp đầy.
Các yếu tố cần hiển thị: kiểu chặn nội tuyến.Làm thế nào để mờ dần để hiển thị: inline-block

Tôi muốn sử dụng hàm jquery .fadeIn(). Điều này đòi hỏi yếu tố ban đầu có một màn hình: không có; để ẩn nó ban đầu. Sau khi fadeIn() các phần tử tắt khóa học có màn hình mặc định: kế thừa;

Làm cách nào để sử dụng chức năng mờ dần với giá trị hiển thị khác với giá trị được kế thừa?

Trả lời

35

Bạn có thể sử dụng chức năng animate của jQuery để tự thay đổi độ mờ, để màn hình không bị ảnh hưởng.

+0

Tôi thích giải pháp này tốt hơn, giữ CSS ra khỏi JS của tôi. – joshuadelange

+10

@joshuadelange không thực sự, độ mờ cũng là CSS – Roy

+0

+1 để tập trung quy trình kỹ thuật hiển thị/ẩn các elments về vị trí cần thiết. – blackhawk

11

Chỉ cần xác thịt ra ý tưởng tốt Phil, đây là một fadeIn() mà tải mất dần trong mỗi phần tử với lớp .faded đến lượt nó, chuyển đổi sang animate():

Cũ:

$(".faded").each(function(i) { 
    $(this).delay(i * 300).fadeIn(); 
}); 

mới:

$(".faded").each(function(i) { 
    $(this).delay(i * 300).css('opacity',0).animate({'opacity': 1}, 500); 
}); 

Hy vọng rằng sẽ giúp một newb jQuery như bản thân mình :) Nếu có một cách tốt hơn để làm điều đó, hãy cho chúng tôi!

202

$("div").fadeIn().css("display","inline-block");

+5

Làm việc như một sự quyến rũ! –

+4

Điều này chắc chắn là câu trả lời tốt hơn. – Jason

+2

Giải pháp vững chắc! – Foxinni

2

Theo jQuery docs cho .show(),

Nếu một phần tử có giá trị hiển thị của nội tuyến, sau đó là ẩn và hiển thị, nó sẽ một lần nữa được hiển thị inline.

Vì vậy, giải pháp của tôi cho vấn đề này là áp dụng quy tắc css cho hiển thị lớp: inline-block trên phần tử, sau đó tôi thêm một lớp khác được gọi là "ẩn" áp dụng display: none; Khi tôi .show() trên phần tử, nó cho thấy nội tuyến.

+0

Tôi cho rằng điều này cũng sẽ hoạt động khi bạn đặt '# el {display: inline-block; display: none;} 'và sau đó chạy' $ ('# el'). fadeIn(); 'bạn nhận được inline-block. Nhưng nó không. – Fanky

7

câu trả lời Makura đã không làm việc cho tôi như vậy giải pháp của tôi là

<div id="div" style="display: none">Some content</div> 

$('#div').css('display', 'inline-block').hide().fadeIn(); 

hide ngay lập tức áp dụng display: none nhưng trước đó nó tiết kiệm giá trị hiển thị hiện tại trong bộ nhớ cache dữ liệu jQuery mà sẽ được phục hồi bởi các cuộc gọi hoạt hình tiếp theo.

Vì vậy, div bắt đầu được định nghĩa tĩnh là display: none. Sau đó, nó được đặt thành inline-block và ngay lập tức bị ẩn chỉ để bị mờ ở mặt sau để inline-block

0

Điều này làm việc ngay cả với display:none được đặt trước bởi css.Sử dụng

$('#element').fadeIn().addClass('displaytype'); 

(và cũng $('#element').fadeOut().removeClass('displaytype');)

với thiết lập trong CSS:

#element.displaytype{display:inline-block;} 

Tôi coi đây là một cách giải quyết như tôi tin fadeIn() nên làm việc để nó sẽ chỉ loại bỏ các quy tắc cuối cùng - display:none khi được đặt thành #element{display:inline-block;display:none;} nhưng nó bị trục trặc loại bỏ cả hai.

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