2
2
import requestAnimationFrame from 'raf' ;
3
3
4
4
const getTime = Date . now || ( ( ) => new Date ( ) . getTime ( ) ) ;
5
+ const sortObj = {
6
+ interval : 1 ,
7
+ timeout : 1 ,
8
+ TweenOneTicker : 2 ,
9
+ }
10
+ const tickObjToArray = ( obj ) => (
11
+ Object . keys ( obj ) . map ( k => ( {
12
+ key : k ,
13
+ func : obj [ k ] ,
14
+ } ) ) . sort ( ( a , b ) => {
15
+ const aa = a . key . split ( '_' ) [ 0 ] ;
16
+ const bb = b . key . split ( '_' ) [ 0 ] ;
17
+ return sortObj [ bb ] - sortObj [ aa ] ;
18
+ } )
19
+ ) ;
5
20
const Ticker = function ( ) {
6
21
} ;
7
22
Ticker . prototype = {
@@ -19,21 +34,21 @@ Ticker.prototype = {
19
34
} ;
20
35
const p = Ticker . prototype ;
21
36
p . add = function ( fn ) {
22
- const key = `TweenOneTicker ${ this . tweenId } ` ;
37
+ const key = `TweenOneTicker_ ${ this . tweenId } ` ;
23
38
this . tweenId ++ ;
24
39
this . wake ( key , fn ) ;
25
40
return key ;
26
41
} ;
27
42
p . wake = function ( key , fn ) {
28
43
this . tickKeyObject [ key ] = fn ;
29
- this . tickFnArray = Object . keys ( this . tickKeyObject ) . map ( k => this . tickKeyObject [ k ] ) ;
44
+ this . tickFnArray = tickObjToArray ( this . tickKeyObject ) ;
30
45
if ( this . id === - 1 ) {
31
46
this . id = requestAnimationFrame ( this . tick ) ;
32
47
}
33
48
} ;
34
49
p . clear = function ( key ) {
35
50
delete this . tickKeyObject [ key ] ;
36
- this . tickFnArray = Object . keys ( this . tickKeyObject ) . map ( k => this . tickKeyObject [ k ] ) ;
51
+ this . tickFnArray = tickObjToArray ( this . tickKeyObject ) ;
37
52
} ;
38
53
p . sleep = function ( ) {
39
54
requestAnimationFrame . cancel ( this . id ) ;
@@ -50,12 +65,12 @@ p.tick = function (a) {
50
65
ticker . lastUpdate += ticker . elapsed ;
51
66
ticker . time = ticker . lastUpdate - ticker . startTime ;
52
67
const overlap = ticker . time - ticker . nextTime ;
53
- if ( overlap > 0 || ! ticker . frame ) {
68
+ if ( overlap > 0 || ! ticker . frame ) {
54
69
ticker . frame ++ ;
55
70
ticker . nextTime += overlap ;
56
71
}
57
72
// console.log(ticker.frame, ticker.nextTime, ticker.time)
58
- ticker . tickFnArray . forEach ( func => func ( a ) ) ;
73
+ ticker . tickFnArray . forEach ( item => item . func ( a ) ) ;
59
74
// 如果 object 里没对象了,自动杀掉;
60
75
if ( ! ticker . tickFnArray . length ) {
61
76
ticker . sleep ( ) ;
@@ -68,7 +83,7 @@ p.timeout = function (fn, time) {
68
83
if ( ! ( typeof fn === 'function' ) ) {
69
84
return console . warn ( 'not function' ) ; // eslint-disable-line
70
85
}
71
- const timeoutID = `timeout ${ Date . now ( ) } -${ timeoutIdNumber } ` ;
86
+ const timeoutID = `timeout_ ${ Date . now ( ) } -${ timeoutIdNumber } ` ;
72
87
const startTime = this . time ;
73
88
this . wake ( timeoutID , ( ) => {
74
89
const moment = this . time - startTime ;
@@ -86,7 +101,7 @@ p.interval = function (fn, time) {
86
101
console . warn ( 'not function' ) ; // eslint-disable-line
87
102
return null ;
88
103
}
89
- const intervalID = `interval ${ Date . now ( ) } -${ intervalIdNumber } ` ;
104
+ const intervalID = `interval_ ${ Date . now ( ) } -${ intervalIdNumber } ` ;
90
105
let starTime = this . time ;
91
106
this . wake ( intervalID , ( ) => {
92
107
const moment = this . time - starTime ;
0 commit comments