我正在使用jQuery和jQuery-ui,并希望動(dòng)畫(huà)各種對(duì)象的各種屬性。為了解釋這里的問(wèn)題,我把它簡(jiǎn)化為一個(gè)div,當(dāng)用戶將鼠標(biāo)懸停在它上面時(shí),它會(huì)從藍(lán)色變?yōu)榧t色。我能夠在使用時(shí)獲得我想要的行為animate(),但是當(dāng)這樣做時(shí),我動(dòng)畫(huà)的樣式必須在動(dòng)畫(huà)代碼中,因此與我的樣式表分開(kāi)。(見(jiàn)例1)另一種方法是使用addClass(),removeClass()但我無(wú)法重新創(chuàng)建我可以獲得的確切行為animate()。(見(jiàn)例2)例1我們來(lái)看看我的代碼animate():$('#someDiv')
.mouseover(function(){
$(this).stop().animate( {backgroundColor:'blue'}, {duration:500});
})
.mouseout(function(){
$(this).stop().animate( {backgroundColor:'red'}, {duration:500});
});它顯示我正在尋找的所有行為:紅色和藍(lán)色之間平滑動(dòng)畫(huà)。當(dāng)用戶快速將鼠標(biāo)移入和移出div時(shí),沒(méi)有動(dòng)畫(huà)“過(guò)度”。如果用戶在動(dòng)畫(huà)仍在播放時(shí)將鼠標(biāo)移出/移入,則在當(dāng)前“中途”狀態(tài)和新“目標(biāo)”狀態(tài)之間正確緩解。但是由于樣式更改是定義的,animate()我必須更改那里的樣式值,并且不能只指向我的樣式表。定義樣式的“碎片”真的讓我困擾。例2這是我目前使用的最佳嘗試addClass()和removeClass(請(qǐng)注意,要使動(dòng)畫(huà)工作,您需要jQuery-ui)://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});
});這顯示了我原始要求的屬性1.和2.但是3不起作用。我明白這個(gè)的原因:當(dāng)動(dòng)畫(huà)addClass()和removeClass()jQuery為元素添加臨時(shí)樣式,然后遞增適當(dāng)?shù)闹?,直到它們達(dá)到提供的類的值,然后才實(shí)際添加/刪除類。因此,我必須刪除style屬性,否則如果動(dòng)畫(huà)中途停止,則樣式屬性將保留并永久覆蓋任何類值,因?yàn)闃?biāo)記中的樣式屬性比類樣式具有更高的重要性。但是,當(dāng)動(dòng)畫(huà)完成一半時(shí),它還沒(méi)有添加新類,因此使用此解決方案,當(dāng)用戶在動(dòng)畫(huà)完成之前移動(dòng)鼠標(biāo)時(shí),顏色會(huì)跳轉(zhuǎn)到上一個(gè)顏色。我理想的是能夠做到這樣的事情:$('#someDiv')
.mouseover(function(){
$(this).stop().animate( getClassContent('blue'), {duration:500});
})
.mouseout(function(){
$(this).stop().animate( getClassContent('red'), {duration:500});
});哪里getClassContent只返回提供的類的內(nèi)容。關(guān)鍵在于,這樣我就不必將樣式定義保留在所有位置,而是可以將它們保存在樣式表中的類中。
使用jQuery動(dòng)畫(huà)addClass / removeClass
婷婷同學(xué)_
2019-09-19 09:31:37