Slide 1

Slide 1 text

Web APIs I ❤

Slide 2

Slide 2 text

Web APIs I "

Slide 3

Slide 3 text

Orlando Del Aguila

Slide 4

Slide 4 text

@orlando @eatcodetravel @eatcodetravel orlandodelaguila.com

Slide 5

Slide 5 text

Photo by Ludde Lorentz on Unsplash Intersection Observer

Slide 6

Slide 6 text

Intersection Observer Observe intersection changes between an element and its ancestors

Slide 7

Slide 7 text

Intersection Observer obs = new IntersectionObserver(callback, options); obs.observe(targetElement);

Slide 8

Slide 8 text

Intersection Observer new IntersectionObserver(callback, options);

Slide 9

Slide 9 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: 0 };

Slide 10

Slide 10 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: 0 }; Can be an element or null null == viewport

Slide 11

Slide 11 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: 0 }; To adjust the root element bounding rectangle Behaves like CSS’ margin property

Slide 12

Slide 12 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: 0 }; Points where you want to get notified
 (callback to be called)

Slide 13

Slide 13 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: 0 }; 0 == when every pixel is intersected

Slide 14

Slide 14 text

Intersection Observer options = { root: document.getElementById('#ancestor'), rootMargin: "0px", threshold: [0, 0.25, 0.5, 0.75, 1] }; Also accepts an Array Here we will be called 5 times at 25% intervals

Slide 15

Slide 15 text

Intersection Observer new IntersectionObserver(callback, options);

Slide 16

Slide 16 text

Intersection Observer observeCallback = (entries, observer) => { entries.forEach(entry => { // use entry read only attributes }); };

Slide 17

Slide 17 text

Intersection Observer observeCallback = (entries, observer) => { entries.forEach(entry => { this.setState({ visible: entry.isIntersecting }); }); }; entry has multiple properties https://mzl.la/2Yv0P7F In the demo we only use: intersectionRatio => int isIntersecting => boolean

Slide 18

Slide 18 text

Intersection Observer obs.observe(targetElement); Observe an element against its rootElement A single observer can ‘observe’ multiple elements

Slide 19

Slide 19 text

Intersection Observer obs.disconnect(); Stop observing all elements

Slide 20

Slide 20 text

Intersection Observer Demo

Slide 21

Slide 21 text

Photo by Davide Cantelli on Unsplash requestIdleCallback

Slide 22

Slide 22 text

requestIdleCallback Queues a function to be called during a browser's idle periods

Slide 23

Slide 23 text

requestIdleCallback

Slide 24

Slide 24 text

requestIdleCallback requestIdleCallback(callback, options);

Slide 25

Slide 25 text

requestIdleCallback requestIdleCallback(callback, options);

Slide 26

Slide 26 text

requestIdleCallback options = { timeout: 1000 } Only accepts timeout as milliseconds If callback has not been called when timeout ends, callback will be called in the next idle period

Slide 27

Slide 27 text

requestIdleCallback requestIdleCallback(callback, options);

Slide 28

Slide 28 text

requestIdleCallback (deadline) => { deadline.timeRemaining() -> int deadline.didTimeout -> bool };

Slide 29

Slide 29 text

requestIdleCallback Demo

Slide 30

Slide 30 text

Photo by Jonathan Saavedra on Unsplash Payment Request

Slide 31

Slide 31 text

Payment Request Provide a consistent UX for users and merchants

Slide 32

Slide 32 text

Payment Request It doesn’t take care of payments. Only provides a faster way for users to provide their payment information.

Slide 33

Slide 33 text

Payment Request

Slide 34

Slide 34 text

Payment Request new PaymentRequest( supportedMethods, cartDetails, options )

Slide 35

Slide 35 text

Payment Request new PaymentRequest( supportedMethods, cartDetails, options )

Slide 36

Slide 36 text

Payment Request { supportedMethods: "basic-card", data: { supportedNetworks: [ "visa", "mastercard", "amex", "jcb", "diners", "discover", "mir", "unionpay" ], supportedTypes: ["debit", "credit"] } }

Slide 37

Slide 37 text

Payment Request new PaymentRequest( supportedMethods, cartDetails, options )

Slide 38

Slide 38 text

Payment Request { id: 'order-123', displayItems: [ { label: 'Example item', amount: {currency: 'USD', value: '1.00'} } ], total: { label: 'Total', amount: {currency: 'USD', value: '1.00'} } };

Slide 39

Slide 39 text

Payment Request new PaymentRequest( supportedMethods, cartDetails, options )

Slide 40

Slide 40 text

Payment Request { requestPayerEmail: true, requestPayerName: false, requestPayerPhone: true, requestShipping: false };

Slide 41

Slide 41 text

Payment Request request .show() .then((paymentResponse) => { // Here we would process the payment // with Stripe for example })

Slide 42

Slide 42 text

Payment Request request .show() .then((paymentResponse) => { // Here we would process the payment // with Stripe for example })

Slide 43

Slide 43 text

Payment Request paymentResponse.requestId paymentResponse.methodName paymentResponse.details paymentResponse.shippingAddress paymentResponse.shippingOption paymentResponse.payerName paymentResponse.payerEmail paymentResponse.payerPhone paymentResponse.complete(status = "unknown") paymentResponse.retry()

Slide 44

Slide 44 text

Payment Request paymentResponse.complete("success").then(() => { window.alert("Thanks for giving us your money"); }); “success" can also be “error" or “unknown” (default value)

Slide 45

Slide 45 text

Payment Request Demo

Slide 46

Slide 46 text

Photo by Joel Filipe on Unsplash Web Bluetooth

Slide 47

Slide 47 text

Web Bluetooth Provides the ability to connect and interact with Bluetooth Low Energy peripherals.

Slide 48

Slide 48 text

Web Bluetooth Bluetooth Low Energy (BLE) is different than good ol’ Bluetooth. BLE broadcasts the services it provides and you can filter only the devices you need before pairing.

Slide 49

Slide 49 text

Web Bluetooth navigator.bluetooth.requestDevice({ filters: [{ services: ["battery_service"]}] });

Slide 50

Slide 50 text

Web Bluetooth navigator.bluetooth.requestDevice({ filters: [{ services: ["battery_service"]}] }).then((device) => { use device }; battery_service is just one of the many you can use here Here’s a list http://bit.ly/2HLqvHQ

Slide 51

Slide 51 text

Web Bluetooth Each type of service has a different way of doing things We will look the code in the demo navigator.bluetooth.requestDevice({ filters: [{ services: ["battery_service"]}] }).then((device) => { use device };

Slide 52

Slide 52 text

Web Bluetooth Demo

Slide 53

Slide 53 text

Photo by Wyron A on Unsplash