Merge branch 'next' into es6-promise
This commit is contained in:
commit
69ead12a1d
1 changed files with 14 additions and 12 deletions
26
mithril.js
26
mithril.js
|
|
@ -366,7 +366,7 @@ Mithril = m = new function app(window, undefined) {
|
|||
m.startComputation()
|
||||
try {return callback.call(object, e)}
|
||||
finally {
|
||||
if (!lastRedrawId) lastRedrawId = -1
|
||||
if (!lastRedrawId) lastRedrawId = -1 //force asynchronous redraw for event handlers, to prevent double redraw in cases like onkeypress+oninput
|
||||
m.endComputation()
|
||||
}
|
||||
}
|
||||
|
|
@ -435,7 +435,8 @@ Mithril = m = new function app(window, undefined) {
|
|||
return gettersetter(store)
|
||||
}
|
||||
|
||||
var roots = [], modules = [], controllers = [], lastRedrawId = 0, redrawAgain = false, computePostRedrawHook = null, prevented = false
|
||||
var roots = [], modules = [], controllers = [], lastRedrawId = 0, lastRedrawCallTime = 0, computePostRedrawHook = null, prevented = false
|
||||
var FRAME_BUDGET = 16 //60 frames per second = 1 call per 16 ms
|
||||
m.module = function(root, module) {
|
||||
var index = roots.indexOf(root)
|
||||
if (index < 0) index = roots.length
|
||||
|
|
@ -459,20 +460,20 @@ Mithril = m = new function app(window, undefined) {
|
|||
m.redraw = function(force) {
|
||||
var cancel = window.cancelAnimationFrame || window.clearTimeout
|
||||
var defer = window.requestAnimationFrame || window.setTimeout
|
||||
//lastRedrawId is a positive number if a second redraw is requested before the next animation frame
|
||||
//lastRedrawId is -1 if the redraw is the first one in a event handler (see #151)
|
||||
//lastRedrawID is null if it's the first redraw and not an event handler
|
||||
if (lastRedrawId && force !== true) {
|
||||
redrawAgain = true
|
||||
//when setTimeout: only reschedule redraw if time between now and previous redraw is bigger than a frame, otherwise keep currently scheduled timeout
|
||||
//when rAF: always reschedule redraw
|
||||
if (new Date - lastRedrawCallTime > FRAME_BUDGET || defer == window.requestAnimationFrame) {
|
||||
if (lastRedrawID > 0) cancel(lastRedrawId)
|
||||
lastRedrawId = defer(redraw, delay)
|
||||
}
|
||||
}
|
||||
else {
|
||||
redraw()
|
||||
lastRedrawId = defer(delay, 16) //60 frames per second = 1 call per 16 ms
|
||||
}
|
||||
|
||||
function delay() {
|
||||
lastRedrawId = null
|
||||
if (redrawAgain) {
|
||||
redrawAgain = false
|
||||
m.redraw()
|
||||
}
|
||||
lastRedrawId = defer(function() {lastRedrawId = null}, delay)
|
||||
}
|
||||
}
|
||||
m.redraw.strategy = m.prop()
|
||||
|
|
@ -486,6 +487,7 @@ Mithril = m = new function app(window, undefined) {
|
|||
computePostRedrawHook = null
|
||||
}
|
||||
lastRedrawId = null
|
||||
lastRedrawCallTime = new Date
|
||||
m.redraw.strategy("diff")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue