|
165 | 165 | remove: remove, |
166 | 166 | }; |
167 | 167 |
|
| 168 | + var raf = |
| 169 | + ( |
| 170 | + typeof window !== 'undefined' && |
| 171 | + ( |
| 172 | + window.requestAnimationFrame || |
| 173 | + window.mozRequestAnimationFrame || |
| 174 | + window.webkitRequestAnimationFrame |
| 175 | + ) |
| 176 | + ) || |
| 177 | + function(cb) { |
| 178 | + return setTimeout(cb, 50 / 3); |
| 179 | + }; |
| 180 | + |
| 181 | + var caf = |
| 182 | + ( |
| 183 | + typeof window !== 'undefined' && |
| 184 | + ( |
| 185 | + window.cancelAnimationFrame || |
| 186 | + window.mozCancelAnimationFrame || |
| 187 | + window.webkitCancelAnimationFrame |
| 188 | + ) |
| 189 | + ) || |
| 190 | + clearTimeout; |
| 191 | + |
| 192 | + function binsearch(arr, prop, key) { |
| 193 | + var mid = 0; |
| 194 | + var left = 0; |
| 195 | + var right = arr.length; |
| 196 | + while (left < right - 1) { |
| 197 | + mid = (left + right) >> 1; |
| 198 | + if (key >= arr[mid][prop]) { |
| 199 | + left = mid; |
| 200 | + } else { |
| 201 | + right = mid; |
| 202 | + } |
| 203 | + } |
| 204 | + if (arr[left] && key < arr[left][prop]) { |
| 205 | + return left; |
| 206 | + } |
| 207 | + return right; |
| 208 | + } |
| 209 | + |
| 210 | + |
| 211 | + function formatMode(mode) { |
| 212 | + if (!/^(ltr|top|bottom)$/i.test(mode)) { |
| 213 | + return 'rtl'; |
| 214 | + } |
| 215 | + return mode.toLowerCase(); |
| 216 | + } |
| 217 | + |
| 218 | + function collidableRange() { |
| 219 | + var max = 9007199254740991; |
| 220 | + return [ |
| 221 | + { range: 0, time: -max, width: max, height: 0 }, |
| 222 | + { range: max, time: max, width: 0, height: 0 } |
| 223 | + ]; |
| 224 | + } |
| 225 | + |
| 226 | + function resetSpace(space) { |
| 227 | + space.ltr = collidableRange(); |
| 228 | + space.rtl = collidableRange(); |
| 229 | + space.top = collidableRange(); |
| 230 | + space.bottom = collidableRange(); |
| 231 | + } |
| 232 | + |
| 233 | + function now() { |
| 234 | + return typeof window.performance !== 'undefined' && window.performance.now |
| 235 | + ? window.performance.now() |
| 236 | + : Date.now(); |
| 237 | + } |
| 238 | + |
168 | 239 | /* eslint no-invalid-this: 0 */ |
169 | 240 | function allocate(cmt) { |
170 | 241 | var that = this; |
171 | | - var ct = this.media ? this.media.currentTime : Date.now() / 1000; |
| 242 | + var ct = this.media ? this.media.currentTime : now() / 1000; |
172 | 243 | var pbr = this.media ? this.media.playbackRate : 1; |
173 | 244 | function willCollide(cr, cmt) { |
174 | 245 | if (cmt.mode === 'top' || cmt.mode === 'bottom') { |
|
223 | 294 |
|
224 | 295 | /* eslint no-invalid-this: 0 */ |
225 | 296 | function createEngine(framing, setup, render, remove) { |
226 | | - return function() { |
| 297 | + return function(_timestamp) { |
227 | 298 | framing(this._.stage); |
228 | | - var dn = Date.now() / 1000; |
| 299 | + var timestamp = _timestamp || now(); |
| 300 | + var dn = timestamp / 1000; |
229 | 301 | var ct = this.media ? this.media.currentTime : dn; |
230 | 302 | var pbr = this.media ? this.media.playbackRate : 1; |
231 | 303 | var cmt = null; |
|
269 | 341 | cmt = this._.runningList[i]; |
270 | 342 | var totalWidth = this._.width + cmt.width; |
271 | 343 | var elapsed = totalWidth * (dn - cmt._utc) * pbr / this._.duration; |
272 | | - if (cmt.mode === 'ltr') cmt.x = (elapsed - cmt.width + .5) | 0; |
273 | | - if (cmt.mode === 'rtl') cmt.x = (this._.width - elapsed + .5) | 0; |
| 344 | + if (cmt.mode === 'ltr') cmt.x = elapsed - cmt.width; |
| 345 | + if (cmt.mode === 'rtl') cmt.x = this._.width - elapsed; |
274 | 346 | if (cmt.mode === 'top' || cmt.mode === 'bottom') { |
275 | 347 | cmt.x = (this._.width - cmt.width) >> 1; |
276 | 348 | } |
|
279 | 351 | }; |
280 | 352 | } |
281 | 353 |
|
282 | | - var raf = |
283 | | - ( |
284 | | - typeof window !== 'undefined' && |
285 | | - ( |
286 | | - window.requestAnimationFrame || |
287 | | - window.mozRequestAnimationFrame || |
288 | | - window.webkitRequestAnimationFrame |
289 | | - ) |
290 | | - ) || |
291 | | - function(cb) { |
292 | | - return setTimeout(cb, 50 / 3); |
293 | | - }; |
294 | | - |
295 | | - var caf = |
296 | | - ( |
297 | | - typeof window !== 'undefined' && |
298 | | - ( |
299 | | - window.cancelAnimationFrame || |
300 | | - window.mozCancelAnimationFrame || |
301 | | - window.webkitCancelAnimationFrame |
302 | | - ) |
303 | | - ) || |
304 | | - clearTimeout; |
305 | | - |
306 | | - function binsearch(arr, prop, key) { |
307 | | - var mid = 0; |
308 | | - var left = 0; |
309 | | - var right = arr.length; |
310 | | - while (left < right - 1) { |
311 | | - mid = (left + right) >> 1; |
312 | | - if (key >= arr[mid][prop]) { |
313 | | - left = mid; |
314 | | - } else { |
315 | | - right = mid; |
316 | | - } |
317 | | - } |
318 | | - if (arr[left] && key < arr[left][prop]) { |
319 | | - return left; |
320 | | - } |
321 | | - return right; |
322 | | - } |
323 | | - |
324 | | - |
325 | | - function formatMode(mode) { |
326 | | - if (!/^(ltr|top|bottom)$/i.test(mode)) { |
327 | | - return 'rtl'; |
328 | | - } |
329 | | - return mode.toLowerCase(); |
330 | | - } |
331 | | - |
332 | | - function collidableRange() { |
333 | | - var max = 9007199254740991; |
334 | | - return [ |
335 | | - { range: 0, time: -max, width: max, height: 0 }, |
336 | | - { range: max, time: max, width: 0, height: 0 } |
337 | | - ]; |
338 | | - } |
339 | | - |
340 | | - function resetSpace(space) { |
341 | | - space.ltr = collidableRange(); |
342 | | - space.rtl = collidableRange(); |
343 | | - space.top = collidableRange(); |
344 | | - space.bottom = collidableRange(); |
345 | | - } |
346 | | - |
347 | 354 | /* eslint no-invalid-this: 0 */ |
348 | 355 | function play() { |
349 | 356 | if (!this._.visible || !this._.paused) { |
|
353 | 360 | if (this.media) { |
354 | 361 | for (var i = 0; i < this._.runningList.length; i++) { |
355 | 362 | var cmt = this._.runningList[i]; |
356 | | - cmt._utc = Date.now() / 1000 - (this.media.currentTime - cmt.time); |
| 363 | + cmt._utc = now() / 1000 - (this.media.currentTime - cmt.time); |
357 | 364 | } |
358 | 365 | } |
359 | 366 | var that = this; |
|
363 | 370 | this._.engine.render.bind(this), |
364 | 371 | this._.engine.remove.bind(this) |
365 | 372 | ); |
366 | | - function frame() { |
367 | | - engine.call(that); |
| 373 | + function frame(timestamp) { |
| 374 | + engine.call(that, timestamp); |
368 | 375 | that._.requestID = raf(frame); |
369 | 376 | } |
370 | 377 | this._.requestID = raf(frame); |
|
503 | 510 | } |
504 | 511 | cmt.text = (cmt.text || '').toString(); |
505 | 512 | cmt.mode = formatMode(cmt.mode); |
506 | | - cmt._utc = Date.now() / 1000; |
| 513 | + cmt._utc = now() / 1000; |
507 | 514 | if (this.media) { |
508 | 515 | var position = 0; |
509 | 516 | if (cmt.time === undefined) { |
|
0 commit comments