Slide 1

Slide 1 text

LT: IntersectionObserverはいいぞ @L_e_k_o

Slide 2

Slide 2 text

しごと    「CureApp禁煙」という治療アプリの開発 しゅみ  プログラミング、トレラン、射撃 きになる  react-native-web、OpenAPI(v3)、Almin L_e_k_o Leko れこ Copyright CureApp, Inc. All Rights Reserved.

Slide 3

Slide 3 text

Scroll event なるべく頑張りたくない

Slide 4

Slide 4 text

● 画像の遅延ロード ● 無限スクロール ● スクロールスパイ(例:Googleのブログ) ● 一定のスクロール位置からposition: fixed ● Adのインプレッション計測 ● 視差効果・パララックス Scroll eventよくある処理

Slide 5

Slide 5 text

● scrollイベントの負荷を減らす - Qiita ● Webフロントエンドに従事するお前らはいい加減高頻度イベン トとレイアウトとスタイリングの付き合い方を考えろ - Qiita ● JavaScriptでの多発するイベントの間引き処理 | 技術コラム | つみきブログ Scroll eventよくあるTips

Slide 6

Slide 6 text

$(window).on(‘scroll’, throttle(e => …) ) IntersectionObserver

Slide 7

Slide 7 text

IntersectionObserver The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport. Intersection Observer API - Web APIs | MDN

Slide 8

Slide 8 text

Forced Synchronous Layout その時点での DOM の位置を取得するために Layout 計算を行う。 この計算は同期処理であり、つまりブロックが発生する。さらにそれを onscroll など頻度 の高いイベントの中で行うのは、スムーズなスクロール表示のためのブラウザの最適化を 阻害してしまう。 - Intersection Observer を用いた要素出現検出の最適化 | blog.jxck.io

Slide 9

Slide 9 text

やや先読み遅延ロード https://codepen.io/L_e_k_o/details/JroVxy

Slide 10

Slide 10 text

56行でスター1600

Slide 11

Slide 11 text

threshold + intersectionRatio https://codepen.io/L_e_k_o/details/Ewazyb

Slide 12

Slide 12 text

消えたらfixed、見えたらstatic https://codepen.io/L_e_k_o/details/OxPYay/

Slide 13

Slide 13 text

polyfill:w3c/IntersectionObserver

Slide 14

Slide 14 text

● 見えてる/見えない = entry.isIntersecting ● どれくらい先読みするか = options.rootMargin ● どれくらい見えてるか = entry.intersectionRatio ● 見えてる間のイベント発生頻度 = options.threshold 正確ではないまとめ

Slide 15

Slide 15 text

IntersectionObserverはいいぞ More details: Intersection Observer API - Web APIs | MDN IntersectionObserver/explainer.md at master · w3c/IntersectionObserver Intersection Observer を用いた要素出現検出の最適化 | blog.jxck.io openfresh/viewport-observer (React) 96 line heavyy/vue-intersect (Vue)