1 回答

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