Svelte анімації

(для галочки чи дійсно корисна фіча)




Борис Могила

DOM.RIA (напрям “Новобудови України”)

Svelte

Svelte - кібернетично розширені веб-програми

Svelte - компілятор для перетворення Svelte компонентів в ванільний js

Svelte анімації


Hello Svelte

Hello Svelte

  • Hello Svelte
  • Hello Svelte
    transition - для анімацій появи і зникнення елементів
    • in - для анімацій появи елементів
    • out - для анімацій зникнення елементів
    animate - для анімацій при зміні положення елемента в масиві
    use - для складних анімацій які не можна створити стандартними методами
    CSS VS TICK

    Варіанти створення анімацій в Svelte

    easy way

    (заюзати вбудовані анімації)
    Вбудовані транзішини

    
    transition:fade|blur|fly|slide|scale|draw={params}
    in:fade|blur|fly|slide|scale|draw={params}
    out:fade|blur|fly|slide|scale|draw={params}
    
    
    						
    Вбудовані анімації:

    
    	animate:flip={params}
    
    
    						

    Jedi way

    (Написати власну анімацію)

    Transition API

    
    transition = (node: HTMLElement, params: any) => {
    	delay?: number,
    	duration?: number,
    	easing?: (t: number) => number,
    	css?: (t: number, u: number) => string,
    	tick?: (t: number, u: number) => void
    }
    
    
    css transition
    js transition
    css animation
    
    animation = (
     node: HTMLElement,
     { from: DOMRect, to: DOMRect },
     params: any
    ) => {
    	delay?: number,
    	duration?: number,
    	easing?: (t: number) => number,
    	css?: (t: number, u: number) => string,
    	tick?: (t: number, u: number) => void
    }
    
    

    Master way

    (Заюзати лібу)
    директива use в дії
    
    let action = (
     node: HTMLElement,
     parameters: any
    ) => {
    	return {
    		update?: (parameters: any) => void,
    		destroy?: () => void
    	}
    }
    
    

    crossfade анімації

    
    const [send, receive] = crossfade({
    	duration: number|(d) => number,
    	fallback: (node: HTMLElement, params: any)  => {
    		delay?: number,
    		duration?: number,
    		easing?: (t: number) => number,
    		css?: (t: number, u: number) => string,
    		tick?: (t: number, u: number) => void
    	}
    });
    in:receive="{{key: number|string}}"
    out:send="{{key: number|string}}"
    
    

    Sapper (Page transitions)

    Demo

    Оригінальна стаття

    Допоміжні вбудовані опції

    easing

    Motion

    tweened
    
    store = tweened(
    	value: any,
    	options: {
    		delay: number,
    		duration number,
    		easing (t:number) => t,
    		interpolate: (a, b) => t => value,
    	}
    )
    
    
    spring
    
    store = spring(
    	value: any,
    	options: {
    		stiffness: number,
    		damping: number,
    		precision: number,
    	}
    )
    
    

    Заключення

    Svelte API для роботи з анімаціями має певні недоліки:

    1. Підтримка
    2. Динамічне створення анімацій
    3. Різноманітність підходів

    Але різноманітність можливостей і підходи до реалізації дають можливість робити дуже круті анімації з невеликими затратами ресурсів девайса

    Кориcні посилання

    svelte.dev (ru.svelte.dev)
    sapper.svelte.dev (ru.sapper.svelte.dev)
    svg in svelte world
    page transitions
    awesome svelte
    Demo

    Контактні дані

    site: https://boryamogila.github.io
    facebook: BorysMohyla
    twitter: BoryaMogila
    email: bora.mog@gmail.com

    Дякую за увагу