Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function interpolate(from, to, progress, easing) {
- switch(typeof to) {
- default:
- return easing(progress) > 0.5 ? to : from
- break
- case(`number`): // Numbers
- let delta = to - from
- return from + delta * easing(progress)
- break
- case(`object`): // Objects
- if(Array.isArray(to)) { // Interpolate Array
- let tempArray = new Array(to.length)
- for(let i in to) {
- tempArray[i] = interpolate(from[i], to[i], progress, easing)
- }
- return tempArray
- } else { // Interpolate Object
- if(to._rgb != undefined) { // Specifically Interpolate Chroma Color
- return chroma.rgb(interpolate(from.rgb(), to.rgb(), progress, easing))
- } else { // Interpolate General Object
- let tempObject = {}
- for(let key of Object.keys(to)) {
- tempObject[key] = interpolate(from[key], to[key], progress, easing)
- }
- return tempObject
- }
- }
- break
- case(`string`): // Strings
- let toIndex = Math.ceil(easing(progress) * to.length) + 1
- let fromIndex = Math.ceil(easing(progress) * from.length)
- if(from.length == 1) {
- return easing(progress) > 0.5 ? to.slice(0, toIndex) : from
- }
- if(to.length == 1) {
- easing(progress) > 0.5 ? to : from.slice(fromIndex, from.length - fromIndex)
- }
- return easing(progress) > 0.5 ? to.slice(0, toIndex) : from.slice(fromIndex, from.length - fromIndex)
- break
- /*
- case(`boolean`): // Booleans
- return to
- break
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement