SlideShare a Scribd company logo
1 of 33
Download to read offline
KIG 29th

Web Animations 1.0
Chang W. Doh
DaVinci S/W Lab.
2014, Notable Web Specifications
1. Web Component
2. Service Worker
3. Web Animations
Before talking about
Web Animations
We know...
●

이미 4종의 규격이 존재
○
○
○
○

CSS Animation
CSS Transition
SVG Animation
requestAnimationFrame()
Issues
● CSS Animation/Transition
○ 조합, 시퀀싱, 병렬 처리의 이슈
○ 제한적인 스크립트 조작성

● SVG Animation
○ 고성능 요구 & 복잡성
○ HTML 컨텐츠에 범용적으로 적용 불가

● requestAnimationFrame()
○ JavaScript!!
○ Main Thread 사용!
Issues: CSS Animation/Transition
● Constraints
○
○
○
○

Synchronous
Sequencing
Seeking, Pause, Reverse
Blending for same prop.
■ 사랑해 마지않는 ‘transform’의 경우가 대표적!
○ Debugging :(
Issues: SVG Animation
● SVG 애니메이션은 강력! :)
○ 그러나, 옆집 아저씨!! :(
○ 웹 컨텐츠 =
■ SVG가 적고(혹은 아예 없거나)
■ 다른 요소들이 주가 됨
○ (Only) SVG Animation
Issues: JavaScript
● requestAnimationFrame()은
○ 업데이트를 위한 좋은 시점을 제공하는 방법이나
○ main thread를 사용

● JavaScript를 이용한 명령형 애니메이션은
○ 보편성/활용성은 높으나
■ CSS 스타일(특히 inline style)에 의한
Recalculation, Layouting, Repaint, …
■ SVG 등과 같이 액세스 불가능한 기능도 존재
Introducing Web Animations
Web Animations
● CSS 및 SVG 애니메이션을 위한 기반 모델 제공
● 애니메이션 API
○ Declarative처럼 그러나 API!!!
○ 하드웨어 가속 친화적!
● 애니메이션 동기화 API
○ Timeline
○ Sequence
● 동적인 애니메이션 조작성
Related Spec.
● CSS3 Animation/Transition
● SVG Animation
Extra features
● Timing group
○ 애니메이션 동기화 및 제어

● Speed Control
○ 애니메이션의 일부 혹은 전체에 대한 Playback rate

● Custom Effect API
○ 웹 애니메이션의 진행에 대한 Callback

● Iteration start
○ 애니메이션의 반복 시간, 시작 시점 지정
Coverage
Web Animations 1.0
● 규격의 대상
○ Abstraction
Animation Model
○ APIs

● 포함하지 않는 것
○
○

CSS syntax & mapping
SVG syntax & mapping
Status
Web Animations 1.0 Spec.
● Editor’s Draft
● Spec. Repository
○ http://dev.w3.org/fxtf/web-animations
Browser supports
● Chrome
○ Web Animations Engine replaced CSS
Animation/Transition Engine.
■ Dec., 2013, Shipped on Canary
■ ~Feb., 2014, Shipped on Chrome Official version
○ Web Animations API
■ maybe 2Q or 3Q, 2014

● Firefox, Safari
○ On radar

● Internet Explorer
○ ?
Polyfill & Demos
● web-animations.js
○ github.com/web-animations/web-animations-js

● Web Animations demo
○ maxwelliott.org/web-animations-js/demos/
Inside of spec.
Web Animations Model Overview
● Timing Model
○ 애니메이션에 관여된 시간을 제어
● Animation Model
○ Timing Model에서 전달된 시간값을 기반으로 애니메
이션 속성에 대한 실제 값을 생성
Hierachy of timing nodes
Hierachical Timing
● Inherited Time vs. Local Time
○ Timing Node는 상위 노드로부터 시간값을 상속
■ 상대적인 시간값
Timing group
● 2 Types
○ 하위 애니메이션에
대한 동기화
○ Sequence
■ 순차적으로 재생
○ Parallel
■ 동시 재생
Timing group mixin
Sequence

Parallel group
Controlling Iteration
● CSS Animation과의 차이점
○ iteration Duration = Active Duration / Iteration Count
Iteration start
● Iteration 시의 애니메이션 시작점 지정
Custom Effect
● Web Animation에 대한 타이밍 콜백 제공
○ Web Animation에서 제공하지 않는 기능에 대한 연동
지점
■ Canvas, Video, Audio, ...
function (
time,

// Time Fraction

interation,

// Iteration Index

target,
prevTime
)
{
/* do stuff */
}

// Target Element
// Previous Time Fraction
APIs()
Creating Animation
● new Animation( target, props, time )
<div class="pulse" style="width:150px;">Hello world!</div>
<script>
var elem = document.querySelector('.pulse');
var player = document.timeline.play(new Animation(elem, [
{opacity: "0.5", transform: "scale(0.5)"},
{opacity: "1.0", transform: "scale(1)"}
],
{
direction: "alternate", duration: 0.5, iterations: Infinity
}));
</script>
Motion path
● Creating Path Animation
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<path id=path d="M 100,100 a 75,75 0 1,0 150,0 a 75,75 0 1,0 -150,0"/>
</defs>
</svg>
<script>
var path = document.querySelector('#path');
var animFunc = new MotionPathEffect( path.pathSegList);
var animation = new Animation(targetElement, animFunc, 2);
</script>
Timing Groups
Creation (sequence/parallel) group
var parGroup = new ParGroup([new Animation(...), new Animation(...)]);
var seqGroup = new SeqGroup([new Animation(...), new Animation(...)]);

Nested groups
var parGroup = new ParGroup([
new SeqGroup([
new Animation(...),
new Animation(...),
]),
new Animation(...)
]);
Player
● Full-controller of animation
// starting animation & getting player
var player = document.timeline.play(myAnimation);
// prop. example 2x speed up!
player.playbackRate = 2;
// animation control
player.cancel();
player.finish();
player.play();
player.pause();
player.reverse();
Thank you!

More Related Content

Similar to Web Animations 1.0 Overview

[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림
NAVER D2
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
Sang Seok Lim
 

Similar to Web Animations 1.0 Overview (20)

김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림
 
시나브로 CSS3
시나브로 CSS3시나브로 CSS3
시나브로 CSS3
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
 
Virtual dom
Virtual domVirtual dom
Virtual dom
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
 
AWS로 불꺼온 나날들
AWS로 불꺼온 나날들AWS로 불꺼온 나날들
AWS로 불꺼온 나날들
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
NDC17 장창완(최종)
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 

More from Chang W. Doh

Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
Chang W. Doh
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
Chang W. Doh
 

More from Chang W. Doh (20)

Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
Service Worker 201 (한국어)
Service Worker 201 (한국어)Service Worker 201 (한국어)
Service Worker 201 (한국어)
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
 
Service Worker 101 (한국어)
Service Worker 101 (한국어)Service Worker 101 (한국어)
Service Worker 101 (한국어)
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymer
 
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
 

Web Animations 1.0 Overview

  • 1. KIG 29th Web Animations 1.0 Chang W. Doh DaVinci S/W Lab.
  • 2. 2014, Notable Web Specifications 1. Web Component 2. Service Worker 3. Web Animations
  • 4. We know... ● 이미 4종의 규격이 존재 ○ ○ ○ ○ CSS Animation CSS Transition SVG Animation requestAnimationFrame()
  • 5. Issues ● CSS Animation/Transition ○ 조합, 시퀀싱, 병렬 처리의 이슈 ○ 제한적인 스크립트 조작성 ● SVG Animation ○ 고성능 요구 & 복잡성 ○ HTML 컨텐츠에 범용적으로 적용 불가 ● requestAnimationFrame() ○ JavaScript!! ○ Main Thread 사용!
  • 6. Issues: CSS Animation/Transition ● Constraints ○ ○ ○ ○ Synchronous Sequencing Seeking, Pause, Reverse Blending for same prop. ■ 사랑해 마지않는 ‘transform’의 경우가 대표적! ○ Debugging :(
  • 7. Issues: SVG Animation ● SVG 애니메이션은 강력! :) ○ 그러나, 옆집 아저씨!! :( ○ 웹 컨텐츠 = ■ SVG가 적고(혹은 아예 없거나) ■ 다른 요소들이 주가 됨 ○ (Only) SVG Animation
  • 8. Issues: JavaScript ● requestAnimationFrame()은 ○ 업데이트를 위한 좋은 시점을 제공하는 방법이나 ○ main thread를 사용 ● JavaScript를 이용한 명령형 애니메이션은 ○ 보편성/활용성은 높으나 ■ CSS 스타일(특히 inline style)에 의한 Recalculation, Layouting, Repaint, … ■ SVG 등과 같이 액세스 불가능한 기능도 존재
  • 10. Web Animations ● CSS 및 SVG 애니메이션을 위한 기반 모델 제공 ● 애니메이션 API ○ Declarative처럼 그러나 API!!! ○ 하드웨어 가속 친화적! ● 애니메이션 동기화 API ○ Timeline ○ Sequence ● 동적인 애니메이션 조작성
  • 11. Related Spec. ● CSS3 Animation/Transition ● SVG Animation
  • 12. Extra features ● Timing group ○ 애니메이션 동기화 및 제어 ● Speed Control ○ 애니메이션의 일부 혹은 전체에 대한 Playback rate ● Custom Effect API ○ 웹 애니메이션의 진행에 대한 Callback ● Iteration start ○ 애니메이션의 반복 시간, 시작 시점 지정
  • 14. Web Animations 1.0 ● 규격의 대상 ○ Abstraction Animation Model ○ APIs ● 포함하지 않는 것 ○ ○ CSS syntax & mapping SVG syntax & mapping
  • 16. Web Animations 1.0 Spec. ● Editor’s Draft ● Spec. Repository ○ http://dev.w3.org/fxtf/web-animations
  • 17. Browser supports ● Chrome ○ Web Animations Engine replaced CSS Animation/Transition Engine. ■ Dec., 2013, Shipped on Canary ■ ~Feb., 2014, Shipped on Chrome Official version ○ Web Animations API ■ maybe 2Q or 3Q, 2014 ● Firefox, Safari ○ On radar ● Internet Explorer ○ ?
  • 18. Polyfill & Demos ● web-animations.js ○ github.com/web-animations/web-animations-js ● Web Animations demo ○ maxwelliott.org/web-animations-js/demos/
  • 20. Web Animations Model Overview ● Timing Model ○ 애니메이션에 관여된 시간을 제어 ● Animation Model ○ Timing Model에서 전달된 시간값을 기반으로 애니메 이션 속성에 대한 실제 값을 생성
  • 22. Hierachical Timing ● Inherited Time vs. Local Time ○ Timing Node는 상위 노드로부터 시간값을 상속 ■ 상대적인 시간값
  • 23. Timing group ● 2 Types ○ 하위 애니메이션에 대한 동기화 ○ Sequence ■ 순차적으로 재생 ○ Parallel ■ 동시 재생
  • 25. Controlling Iteration ● CSS Animation과의 차이점 ○ iteration Duration = Active Duration / Iteration Count
  • 26. Iteration start ● Iteration 시의 애니메이션 시작점 지정
  • 27. Custom Effect ● Web Animation에 대한 타이밍 콜백 제공 ○ Web Animation에서 제공하지 않는 기능에 대한 연동 지점 ■ Canvas, Video, Audio, ... function ( time, // Time Fraction interation, // Iteration Index target, prevTime ) { /* do stuff */ } // Target Element // Previous Time Fraction
  • 29. Creating Animation ● new Animation( target, props, time ) <div class="pulse" style="width:150px;">Hello world!</div> <script> var elem = document.querySelector('.pulse'); var player = document.timeline.play(new Animation(elem, [ {opacity: "0.5", transform: "scale(0.5)"}, {opacity: "1.0", transform: "scale(1)"} ], { direction: "alternate", duration: 0.5, iterations: Infinity })); </script>
  • 30. Motion path ● Creating Path Animation <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <path id=path d="M 100,100 a 75,75 0 1,0 150,0 a 75,75 0 1,0 -150,0"/> </defs> </svg> <script> var path = document.querySelector('#path'); var animFunc = new MotionPathEffect( path.pathSegList); var animation = new Animation(targetElement, animFunc, 2); </script>
  • 31. Timing Groups Creation (sequence/parallel) group var parGroup = new ParGroup([new Animation(...), new Animation(...)]); var seqGroup = new SeqGroup([new Animation(...), new Animation(...)]); Nested groups var parGroup = new ParGroup([ new SeqGroup([ new Animation(...), new Animation(...), ]), new Animation(...) ]);
  • 32. Player ● Full-controller of animation // starting animation & getting player var player = document.timeline.play(myAnimation); // prop. example 2x speed up! player.playbackRate = 2; // animation control player.cancel(); player.finish(); player.play(); player.pause(); player.reverse();