Advertisement
Guest User

Untitled

a guest
Apr 1st, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function interpolate(from, to, progress, easing) {
  2.     switch(typeof to) {
  3.         default:
  4.             return easing(progress) > 0.5 ? to : from
  5.         break
  6.  
  7.         case(`number`): // Numbers
  8.             let delta = to - from
  9.             return from + delta * easing(progress)
  10.         break
  11.  
  12.         case(`object`): // Objects
  13.             if(Array.isArray(to)) { // Interpolate Array
  14.  
  15.                 let tempArray = new Array(to.length)
  16.                 for(let i in to) {
  17.                     tempArray[i] = interpolate(from[i], to[i], progress, easing)
  18.                 }
  19.                 return tempArray
  20.  
  21.             } else { // Interpolate Object
  22.                 if(to._rgb != undefined) { // Specifically Interpolate Chroma Color
  23.  
  24.                     return chroma.rgb(interpolate(from.rgb(), to.rgb(), progress, easing))
  25.  
  26.                 } else { // Interpolate General Object
  27.  
  28.                     let tempObject = {}
  29.                     for(let key of Object.keys(to)) {
  30.                         tempObject[key] = interpolate(from[key], to[key], progress, easing)
  31.                     }
  32.                     return tempObject
  33.  
  34.                 }
  35.             }
  36.         break
  37.  
  38.        
  39.         case(`string`): // Strings
  40.  
  41.         let toIndex = Math.ceil(easing(progress) * to.length) + 1
  42.         let fromIndex = Math.ceil(easing(progress) * from.length)
  43.  
  44.             if(from.length == 1) {
  45.                 return easing(progress) > 0.5 ? to.slice(0, toIndex) : from
  46.             }
  47.  
  48.             if(to.length == 1) {
  49.                 easing(progress) > 0.5 ? to : from.slice(fromIndex, from.length - fromIndex)
  50.             }
  51.  
  52.             return easing(progress) > 0.5 ? to.slice(0, toIndex) : from.slice(fromIndex, from.length - fromIndex)
  53.         break
  54.        
  55.         /*
  56.         case(`boolean`): // Booleans
  57.             return to
  58.         break
  59.         */
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement