Skip to content

Commit b48043f

Browse files
committed
2.0.7
1 parent debc12d commit b48043f

13 files changed

+493
-451
lines changed

dist/danmaku.canvas.js

Lines changed: 81 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,81 @@
165165
remove: remove,
166166
};
167167

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+
168239
/* eslint no-invalid-this: 0 */
169240
function allocate(cmt) {
170241
var that = this;
171-
var ct = this.media ? this.media.currentTime : Date.now() / 1000;
242+
var ct = this.media ? this.media.currentTime : now() / 1000;
172243
var pbr = this.media ? this.media.playbackRate : 1;
173244
function willCollide(cr, cmt) {
174245
if (cmt.mode === 'top' || cmt.mode === 'bottom') {
@@ -223,9 +294,10 @@
223294

224295
/* eslint no-invalid-this: 0 */
225296
function createEngine(framing, setup, render, remove) {
226-
return function() {
297+
return function(_timestamp) {
227298
framing(this._.stage);
228-
var dn = Date.now() / 1000;
299+
var timestamp = _timestamp || now();
300+
var dn = timestamp / 1000;
229301
var ct = this.media ? this.media.currentTime : dn;
230302
var pbr = this.media ? this.media.playbackRate : 1;
231303
var cmt = null;
@@ -269,8 +341,8 @@
269341
cmt = this._.runningList[i];
270342
var totalWidth = this._.width + cmt.width;
271343
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;
274346
if (cmt.mode === 'top' || cmt.mode === 'bottom') {
275347
cmt.x = (this._.width - cmt.width) >> 1;
276348
}
@@ -279,71 +351,6 @@
279351
};
280352
}
281353

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-
347354
/* eslint no-invalid-this: 0 */
348355
function play() {
349356
if (!this._.visible || !this._.paused) {
@@ -353,7 +360,7 @@
353360
if (this.media) {
354361
for (var i = 0; i < this._.runningList.length; i++) {
355362
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);
357364
}
358365
}
359366
var that = this;
@@ -363,8 +370,8 @@
363370
this._.engine.render.bind(this),
364371
this._.engine.remove.bind(this)
365372
);
366-
function frame() {
367-
engine.call(that);
373+
function frame(timestamp) {
374+
engine.call(that, timestamp);
368375
that._.requestID = raf(frame);
369376
}
370377
this._.requestID = raf(frame);
@@ -503,7 +510,7 @@
503510
}
504511
cmt.text = (cmt.text || '').toString();
505512
cmt.mode = formatMode(cmt.mode);
506-
cmt._utc = Date.now() / 1000;
513+
cmt._utc = now() / 1000;
507514
if (this.media) {
508515
var position = 0;
509516
if (cmt.time === undefined) {

dist/danmaku.canvas.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)