JQuery ve jQuery-ui kullanıyorum ve çeşitli nesneler üzerinde çeşitli öznitelikleri canlandırmak istiyorum.
Sorunu burada açıklamak adına, kullanıcı fareyle üzerine geldiğinde maviden kırmızıya değişen bir div'e basitleştirdim.
Kullanırken istediğim davranışı elde edebiliyorum animate()
, ancak bunu yaparken animasyon yaptığım stiller animasyon kodunda olmalı ve böylece stil sayfamdan ayrı. (bakınız örnek 1 )
Bir alternatif kullanıyor addClass()
ve removeClass()
alabileceğim tam davranışı yeniden oluşturamadım animate()
. (bakınız örnek 2 )
örnek 1
Sahip olduğum koda bir göz atalım animate()
:
$('#someDiv')
.mouseover(function(){
$(this).stop().animate( {backgroundColor:'blue'}, {duration:500});
})
.mouseout(function(){
$(this).stop().animate( {backgroundColor:'red'}, {duration:500});
});
aradığım tüm davranışları görüntüler:
- Kırmızı ve mavi arasında sorunsuz bir şekilde hareket eder.
- Kullanıcı faresini hızlı bir şekilde divın içine ve dışına hareket ettirdiğinde animasyon 'aşırı hız' olmaz.
- Kullanıcı animasyon devam ederken faresini dışarı / içeri hareket ettirirse, mevcut 'yarı' durum ile yeni 'hedef' durum arasında doğru şekilde hareket eder.
Ancak stil değişiklikleri tanımlandığından, animate()
oradaki stil değerlerini değiştirmek zorundayım ve sadece stil sayfamı işaret edemez. Tarzların tanımlandığı bu 'parçalanma' beni gerçekten rahatsız eden bir şeydir.
ÖRNEK 2
İşte benim şu anki en iyi girişimi addClass()
ve removeClass
(animasyonun çalışması için jQuery-ui'ye ihtiyacınız olduğunu unutmayın):
//assume classes 'red' and 'blue' are defined
$('#someDiv')
.addClass('blue')
.mouseover(function(){
$(this).stop(true,false).removeAttr('style').addClass('red', {duration:500});
})
.mouseout(function(){
$(this).stop(true,false).removeAttr('style').removeClass('red', {duration:500});
});
Bu, orijinal gereksinimlerimin 1. ve 2. özelliklerini gösterir, ancak 3 çalışmaz.
Bunun nedenini anlıyorum:
Animasyon addClass()
ve removeClass()
jQuery öğeye geçici bir stil ekler ve ardından verilen sınıfın değerlerine ulaşıncaya kadar uygun değerleri artırır ve yalnızca o zaman sınıfı ekler / kaldırır.
Bu nedenle style niteliğini kaldırmam gerekir, aksi takdirde animasyon yarıda durdurulursa style niteliği kalır ve herhangi bir sınıf değerinin üzerine kalıcı olarak yazılır, çünkü bir etiketteki stil nitelikleri sınıf stillerinden daha fazla önem taşır.
Ancak animasyon yarıya kadar tamamlandığında henüz yeni sınıf eklemedi ve bu çözümle kullanıcı animasyon tamamlanmadan önce faresini hareket ettirdiğinde renk önceki renge atlar.
İdeal olarak istediğim böyle bir şey yapabilmek:
$('#someDiv')
.mouseover(function(){
$(this).stop().animate( getClassContent('blue'), {duration:500});
})
.mouseout(function(){
$(this).stop().animate( getClassContent('red'), {duration:500});
});
Nerede getClassContent
sadece sağlanan sınıfın içeriği dönecekti. Anahtar nokta şu ki stil tanımlarımı her yerde tutmak zorunda değilim, ancak stil sayfamdaki sınıflarda tutabilirim.
getClassContent
görünüyor