1 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
今天被迫查了JQuery,又經(jīng)過(guò)一番嘗試,終于找到了解決辦法。大概有我這種問(wèn)題的人很少吧,不過(guò)我還是貼一下答案吧。
雖然step提供了修改fx的屬性值的一個(gè)機(jī)會(huì),但是并不是直接修改就能解決的。在這里,fx.start和fx.end都是一成不變的,而fx.pos這個(gè)屬性,代表的是動(dòng)畫(huà)當(dāng)前狀態(tài)在整個(gè)動(dòng)畫(huà)過(guò)程中的百分比,它的值從0到1,中間是以0.為開(kāi)頭的一長(zhǎng)串小數(shù)。而fx.now代表的就是動(dòng)畫(huà)當(dāng)前屬性改變的值。
經(jīng)過(guò)一番查源碼,得到這樣一個(gè)公式:fx.now = (fx.end - fx.start) * fx.pos + fx.start。倘若修改了fx.end的話,now值有可能會(huì)改變,就會(huì)造成中途動(dòng)畫(huà)突然抽搐一下的情況。所以需要修改fx.start的值。假設(shè)修改后fx.end的值為end1,修改后fx.start,設(shè)其為start1,那么
start1 = (fx.start - fx.pos * (fx.start - (fx.end - end1)))/(1 - fx.pos)
并且start只能賦值一次,接下來(lái)的step方法需要沿用賦值后的start。也就是說(shuō),設(shè)一個(gè)初始變量
var flag = truestep:function(now,fx){ fx.end = end1;//這一步用來(lái)修改fx.end的值,請(qǐng)根據(jù)自己需要去寫(xiě)。 if(flag){ fx.start = (fx.start - fx.pos * (fx.start - (fx.end - end1)))/(1 - fx.pos); flag = false; } }
添加回答
舉報(bào)