2012-11-08 18 views
7

http://jsfiddle.net/chovy/dk5Ua/jQuery fadeIn() ekranda sonuçları: inline elemanı için blok

<div></div> 

var $span = $('<span>foo</span>'); 

$span.hide(); 
$("div").append($span); 
$span.fadeIn(); 

Sen sonuçlanan yayılma satır içi stil display: block; yerine inline vardır fark edeceksiniz.

Bu sonuçlanan html geçerli: inline: Ben fadeIn() ekrana sonuçlanması nasıl alabilirim

<span style="display: block;">foo</span> 

?

+0

bekleyin, soru yine budur ? –

+1

Bana oldukça sıradan görünüyor. Kemanda – Blender

+0

, bloktur. Soruyu güncelledim. – chovy

cevap

0

ve bana bir satır içi stil verir .

var $htm = $('<span/>') 
, $divs = $('div'); 

$divs.replaceWith(function(){ 
    return $htm.clone().fadeIn(2000); 
}); 
4

Adrian'la birlikteyim; Bu gerçekten bir soru değildi. Ama siz haklısınız: jQuery, öğeleri gösterme/gizleme (örn. Göster, gizle, togle, fadeOut, vb.) Kullanan herhangi bir şey kullandığınızda ekran özelliklerinin çok naif bir çevirisini yapar.

isShown ? 'block' : 'none'; 

: yerine temelde kendi mantığı, bir

isShown ? '' : 'none'; 

:

dürüstçe bu (çok daha basit olurdu yapmak neden sadece ekranı ayarlamak için hiçbir zaman anlayamadım) Ama onlar yaptıkları her şey için nedenleri var, bu yüzden şeyler üzerinde yanlış görüntü türleri ayarlama arkasında bir mantık var sanırım.

* DÜZENLEME *

şüphelendiğim gibi jQuery insanların nedenlerini (jfriend00 yorumlarını görebilirsiniz) var mı; Ayrıca şu anda soruda gerçek bir soru olduğunu görüyorum:

Ekranda görüntülenmek üzere fadeIn() öğesini nasıl alabilirim?

Yanıt, fadeIn'in nasıl çalıştığına bakmanız gerektiğidir; Başka bir deyişle,

this.animate({opacity: "show"}, speed, easing, callback); 

o kabaca eşdeğer: aslında bu sadece

this.animate({opacity: '100%'}, speed, easing, function() { 
    this.css('display', 'block') 
}); 

(UYARI: Yukarıdaki kod çalışması gerekirken bu yüzden, aslında jQuery'nin animasyon özelliklerinin büyük bir kullanıcı değilim , Söz vermiyorum).

Verilen sen (gibi 'inline' demek) başka bir şey ekranı ayarlamak isterseniz, yapabileceğiniz, o: Ben fadein çağırabilir orijinal nesneyi klonlama ile

this.animate({opacity: '100%'}, speed, easing, function() { 
    this.css('display', 'inline') // or you could use this.css('display', '') 
}); 
+0

Muhtemelen 'isShown'u kullanamazlar mı? '': 'none'; 'Çünkü yürürlükte olabilecek CSS'yi geçersiz kılmak ve '' '' 'ye ayarlamak, CSS'nin gösterilecek nesneyi zorlamaktan ziyade etkin olmasını sağlardı. – jfriend00

+0

Bunun sebebi, inline öğelerin, akışın bir parçası olmasından dolayı, görüntü özelliklerinin değiştirilmesinde daha fazla bozulmaya neden olduklarından, etraflarındaki her şeyin yeniden akışını zorladıkları için hayal ediyorum. Öğedeki rgba() öğesindeki bir değişikliği canlandırabileceğinizi varsayalım, ancak bu, tüm tarayıcılarda da bu kadar iyi desteklenmeyecektir. –

+0

@ jfriend00 “CSS'nin etkin olmasına izin vermez”; Var olan değerin, '(' her 'tarayıcısında'), değeri varsayılan değerine geri döndürdüğü ("her tür tarayıcıda") yerini alır (örneğin, "satırlar için satır içi, satırlar için satır içi", vb.). – machineghost

15

Benzer bir soruna basit bir çözüm buldum.Senin durumunda, düzeltme bu olacaktır:

$span.css('display', 'inline').hide().fadeIn(); 
1

Ben bu son derece yararlı, ve biraz daha basit bulundu (MakuraYami 'ın answerthis question için dayalı):

$span.fadeIn().css('display', 'inline');