/* -------------------------- */ /* animationplugin */ /* -------------------------- */ var animationplugin = function animationplugin(superform, params = {}) { var limit = params.limit || 2000 var wait = params.wait || 0 var period = params.period || 1000 var sliceanima = function(formdef, dt) { let params = {} for (let n in formdef) { let v = formdef[n] if (Array.isArray(v)) { let a = v[0] let b = v[1] var d = d3.range(v.length).map(function(item, idx){ return idx / (v.length - 1) }) var x = d3.scaleLinear() .domain(d) .range(v) let c = x(dt) params[n] = c } else if (typeof v === 'function') { let c = v(dt) params[n] = c } else { let a = v params[n] = a } } __map.state().config.form.params = params return(params) } function animationplugin() {} animationplugin.run = function(anima = {}) { var starttime var t = d3.scaleLinear() // time scale .domain([0, period]) .range([0, 1]) var amimas = [] // make array if (!Array.isArray(anima)) animas = [anima] else animas = anima var animation = function(elapsed) { if (starttime == undefined) starttime = elapsed let t_elapsed = elapsed - starttime let elapsedInPeriod = t_elapsed % period let dt = t(elapsedInPeriod) for (let i= 0; i < animas.length; i++) { let _wait = wait let _limit = limit // check temporal params if (typeof(animas[i].t0) !== 'undefined') _wait = limit * animas[i].t0 / 100 if (typeof(animas[i].t1) !== 'undefined') _limit = limit * animas[i].t1 / 100 let f = sliceanima(animas[i], dt) let xf = Object.assign({}, f, {'id': f.id || 'xsf' + i}) superform.redraw(xf) if (elapsed > _limit) __map.state().tim.timer.stop() } } __map.state({"tim": Object.assign(__map.state().tim, { 'fn': animation, 'wait': wait, 'timer': d3.timer(animation, wait), 'started': true, 'ticking': true, }) }) } return animationplugin } ;