1
+ //Экспрешн, которые позволяет менять значение одного кейфрейма, с сохранением кривых анимации. Править первые две строчки
2
+
3
+ myKfNum = 3 ; //номер кейфрема
4
+ myKfNewValue = 180 ; //новое значение для этого кейфрейма
5
+
6
+ Array . prototype . linear = function ( tMin , tMax , val1 , val2 )
7
+ {
8
+ if ( arguments . length < 4 )
9
+ return this ;
10
+ for ( var i = 0 ; i < arguments . length ; i ++ )
11
+ if ( ! arguments [ i ] instanceof Array )
12
+ return this ;
13
+
14
+ var newVal = [ ] ;
15
+ for ( var k = 0 ; k < this . length ; k ++ )
16
+ if ( tMin [ k ] <= tMax [ k ] )
17
+ newVal [ k ] = linear ( this [ k ] , tMin [ k ] , tMax [ k ] , val1 [ k ] , val2 [ k ] ) ;
18
+ else
19
+ newVal [ k ] = linear ( this [ k ] , tMin [ k ] , tMax [ k ] , val2 [ k ] , val1 [ k ] ) ;
20
+ return newVal ;
21
+ }
22
+
23
+ myKfOldValue = key ( myKfNum ) . value //старое значение маркера
24
+ myKfTime = key ( myKfNum ) . time //время кейфрейма
25
+
26
+ if ( time <= myKfTime ) //участок до нашего кейфрейма
27
+ if ( myKfNum == 1 ) //если это первый кейфрейм
28
+ myKfNewValue ; //не анимируем анимацию до него (её нет)
29
+ else
30
+ {
31
+ prevKfTime = key ( myKfNum - 1 ) . time //время предыдущего маркера
32
+ prevKfValue = key ( myKfNum - 1 ) . value //значение предыдущего маркера
33
+ if ( time >= prevKfTime ) //если мы в промежутке между нашим и предыдущим кейфреймами
34
+ if ( value instanceof Array )
35
+ value . linear ( prevKfValue , myKfOldValue , prevKfValue , myKfNewValue ) ; //МАГИЯ
36
+ else
37
+ if ( prevKfValue < myKfOldValue )
38
+ linear ( value , prevKfValue , myKfOldValue , prevKfValue , myKfNewValue ) ; //МАГИЯ
39
+ else
40
+ linear ( value , prevKfValue , myKfOldValue , myKfNewValue , prevKfValue ) ; //МАГИЯ
41
+ else //если мы до промежутка с измененной анимацией
42
+ value ; //ниче не делаем
43
+ }
44
+ else //УЧАСТОК ПОСЛЕ НАШЕГО КЕЙФРЕЙМА
45
+ if ( myKfNum == numKeys ) //если это последний кейфрейм
46
+ myKfNewValue ; //не анимируем
47
+ else
48
+ {
49
+ nextKfTime = key ( myKfNum + 1 ) . time ; ////время следующего маркера
50
+ nextKfValue = key ( myKfNum + 1 ) . value ; //значение следующего маркера
51
+ if ( time <= nextKfTime )
52
+ if ( value instanceof Array )
53
+ value . linear ( myKfOldValue , nextKfValue , myKfNewValue , nextKfValue ) ; //МАГИЯ
54
+ else
55
+ {
56
+ if ( myKfOldValue < nextKfValue )
57
+ linear ( value , myKfOldValue , nextKfValue , myKfNewValue , nextKfValue ) ; //МАГИЯ
58
+ else
59
+ linear ( value , myKfOldValue , nextKfValue , nextKfValue , myKfNewValue ) ; //МАГИЯ
60
+ }
61
+ else value ;
62
+ }
0 commit comments