Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Houdini Breakout Session
Search
Surma
November 12, 2016
Technology
700
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Houdini Breakout Session
Chrome Dev Summit 2016
Surma
November 12, 2016
More Decks by Surma
See All by Surma
Know thy buzzwords: HTTP/2
surma
1
590
Houdini – Demystifying CSS
surma
3
350
Progressive Web Apps – Mobile has natively come to the Web
surma
5
310
The Glorious Era of HTTP/2
surma
1
130
Instant Loading
surma
4
1.3k
HTTP/2 101
surma
5
540
What if there isn’t?
surma
0
110
What if there isn’t?
surma
2
210
The Web is a Contender
surma
0
170
Other Decks in Technology
See All in Technology
失敗を資産に変えるClaude Code
shinyasaita
0
420
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
RAG を使わないという選択肢
tatsutaka
1
190
EventBridge Connection
_kensh
5
690
タクシーアプリ『GO』の実践的データ活用
mot_techtalk
3
190
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
120
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
790
手塩にかけりゃいいってもんじゃない
ming_ayami
0
360
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
800
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
3
200
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
160
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
4k
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
Prompt Engineering for Job Search
mfonobong
0
340
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
Become a Pro
speakerdeck
PRO
31
6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Six Lessons from altMBA
skipperchong
29
4.3k
Transcript
Houdini
Houdini
Typed Object Model
Typed Object Model $('#element').styleMap .set('opacity', new CSSNumberValue(0.5)); $('#element').styleMap .set('height', new
CSSSimpleLength(50, 'px'));
Typed Object Model $('#element').styleMap .set('height', new CSSSimpleLength(50, 'px')); $('#element').styleMap .get('height').value;
// 50 $('#element').styleMap .get('height').type; // ‘px’
Typed Object Model $('#element').styleMap .set('height', new CSSCalcLength('50vh - 20px')); $('#element').styleMap.get('height').vh;
// 50 $('#element').styleMap.get('height').px; // -20
Typed Object Model $('#element').styleMap .set("height", new CSSCalcLength({ vh: 50, px:
-20, }));
Typed Object Model const h = new CSSSimpleLength(50, 'vh') .subtract(new
CSSSimpleLength(20, ‘px')); $('#element').styleMap.set('height', h);
Typed Object Model const h = new CSSSimpleLength(50, 'vh') .subtract(new
CSSSimpleLength(20, ‘px')); $('#element').styleMap.set('height', h); // h == calc(50vh - 20px);
None
Houdini
Houdini X AnimationWorklet
Animation Worklet
None
None
bit.ly/best-effort-scroll position: static;
bit.ly/best-effort-scroll position: static; position: fixed; + JS transform
Animation Worklet <style> :root { animator-root: parallax; } .bg {
animator: parallax; } </style> <div class='bg' style='--parallax-rate: 0.2'></div> <div class='bg' style='--parallax-rate: 0.5'></div> Experimental
Animation Worklet registerAnimator('parallax', class ParallaxAnimator { static inputProperties = ['transform',
'--parallax-rate']; static outputProperties = ['transform']; static rootInputScroll = true; animate(root, children) { const scrollTop = root.scrollOffsets.top; children.forEach(background => parallaxMath(elem, background.styleMap.get('--parallax-rate'))); } }); Experimental
None
Houdini
Paint Worklet
Paint Worklet <div id="myElement"></div> <style> #myElement { --image: url('#someUrlWhichIsLoading'); background-image:
paint(image-with-placeholder); } </style> Experimental
Paint Worklet <script> document.registerProperty({ name: '--image', syntax: '<image>' }); window.paintWorklet.import('paintworklet.js');
</script> Experimental
Paint Worklet registerPaint('image-with-placeholder', class { static get inputProperties() { return
['--image']; } paint(ctx, geom, properties) { // ... } }); Experimental
Paint Worklet paint(ctx, geom, properties) { const img = properties.get('--image');
switch (img.state) { case 'ready': ctx.drawImage(img, 0, 0, geom.width, geom.height); break; case 'pending': drawMountains(ctx); break; case 'invalid': default: drawSadFace(ctx); } } Experimental
None
bit.ly/houdini-updates
None