75
Creating Responsive HTML5 Touch Interfaces Stephen Woods Sunday, March 11, 12

HTML5 Touch Interfaces: SXSW extended version

Embed Size (px)

DESCRIPTION

SXSW Version...

Citation preview

Page 1: HTML5 Touch Interfaces: SXSW extended version

Creating Responsive HTML5 Touch InterfacesStephen Woods

Sunday, March 11, 12

Page 2: HTML5 Touch Interfaces: SXSW extended version

Stephen WoodsFront End Engineer

Flickr

Sunday, March 11, 12

Page 3: HTML5 Touch Interfaces: SXSW extended version

Sunday, March 11, 12

Page 4: HTML5 Touch Interfaces: SXSW extended version

On the desktop we worry about browsers-moz-transform:rotate(-270deg); -moz-transform-origin: bottom left;-webkit-transform: rotate(-270deg);-webkit-transform-origin: bottom left;-o-transform: rotate(-270deg);-o-transform-origin: bottom left;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);

Sunday, March 11, 12

Page 5: HTML5 Touch Interfaces: SXSW extended version

On mobile we worry about devices.

Sunday, March 11, 12

Page 6: HTML5 Touch Interfaces: SXSW extended version

Wait!Did you say they all

run webkit?

Sunday, March 11, 12

Page 7: HTML5 Touch Interfaces: SXSW extended version

Wait!Did you say they all

run webkit?

Sunday, March 11, 12

Page 8: HTML5 Touch Interfaces: SXSW extended version

Wait!Did you say they all

run webkit?

XSunday, March 11, 12

Page 9: HTML5 Touch Interfaces: SXSW extended version

On mobile we worry about devices.

Sunday, March 11, 12

Page 10: HTML5 Touch Interfaces: SXSW extended version

Media Queries, Break points, liquid layouts

Screen Sizes

http://www.alistapart.com/articles/responsive-web-design/Sunday, March 11, 12

Page 11: HTML5 Touch Interfaces: SXSW extended version

Sunday, March 11, 12

Page 12: HTML5 Touch Interfaces: SXSW extended version

iPhone 3GS256mb RAM

Geekbench: 271

Sunday, March 11, 12

Page 13: HTML5 Touch Interfaces: SXSW extended version

iPhone 3GS256mb RAM

Geekbench: 271

==

Sunday, March 11, 12

Page 14: HTML5 Touch Interfaces: SXSW extended version

Modern mobile devices are crappy

computers with decent video cards.

Sunday, March 11, 12

Page 15: HTML5 Touch Interfaces: SXSW extended version

Sunday, March 11, 12

Page 16: HTML5 Touch Interfaces: SXSW extended version

Perceived Performance

Sunday, March 11, 12

Page 17: HTML5 Touch Interfaces: SXSW extended version

On the desktop it’s easy...

Throw up a spinner.Sunday, March 11, 12

Page 18: HTML5 Touch Interfaces: SXSW extended version

Touch interfaces are tactile.

Sunday, March 11, 12

Page 19: HTML5 Touch Interfaces: SXSW extended version

Touch interfaces are tactile.

Feedback must be continuous.

Sunday, March 11, 12

Page 20: HTML5 Touch Interfaces: SXSW extended version

When the interface stops moving

during a gesture it feels like it died

Sunday, March 11, 12

Page 21: HTML5 Touch Interfaces: SXSW extended version

Respect Convention

Sunday, March 11, 12

Page 22: HTML5 Touch Interfaces: SXSW extended version

Mobile has conventions too

Sunday, March 11, 12

Page 23: HTML5 Touch Interfaces: SXSW extended version

Mobile has conventions too

Sunday, March 11, 12

Page 24: HTML5 Touch Interfaces: SXSW extended version

TouchEvent

• touchstart - fires once

• touchmove - fires continuously

• touchend - fires once

Sunday, March 11, 12

Page 25: HTML5 Touch Interfaces: SXSW extended version

The touches Array

• You only get one on Android

• You get up to 11 on iOS

• Each touch gives you position information, and sometimes scale

Sunday, March 11, 12

Page 26: HTML5 Touch Interfaces: SXSW extended version

iOS Gesture Events

• gesturestart

• gesturechange

• gestureend

Sunday, March 11, 12

Page 27: HTML5 Touch Interfaces: SXSW extended version

iOS Developer Library

http://bit.ly/iOS-guide

Sunday, March 11, 12

Page 28: HTML5 Touch Interfaces: SXSW extended version

Making Gestures Work

• Prioritize user feedback

•Use hardware acceleration

•Manage your memory

Sunday, March 11, 12

Page 29: HTML5 Touch Interfaces: SXSW extended version

Prioritize User-feedback

•Don’t do any loading during gestures

• Treat the DOM as write-only (do your own math)

•When at all possible, use css transitions

Sunday, March 11, 12

Page 30: HTML5 Touch Interfaces: SXSW extended version

Write-Only DOM

•DOM touches are really expensive

• You know where everything is

•Use matrix transforms to queue up positions

Sunday, March 11, 12

Page 31: HTML5 Touch Interfaces: SXSW extended version

Swipe Basics

distance = e.touches[0].pageX - startX;

'translate3d('+distance+'px,0px,0px)'

Sunday, March 11, 12

Page 32: HTML5 Touch Interfaces: SXSW extended version

Snap back/snap forward

• Keep track of last position, use transitions with easing to snap back

• Pick a swipe distance threshold, use that to snap forward (ontouchend)

• If the user is gesturing, the element must be moving

Sunday, March 11, 12

Page 33: HTML5 Touch Interfaces: SXSW extended version

A Word about scrolling

•Use native if at all possible:

•-webkit-overflow-scrolling: touch;

• If not, use a library to simulate momentum scroll (iScroll 4, Scrollability)

Sunday, March 11, 12

Page 34: HTML5 Touch Interfaces: SXSW extended version

Avoid Event Abstraction

Sunday, March 11, 12

Page 35: HTML5 Touch Interfaces: SXSW extended version

Pinch to Zoom(there will be math)

Image © Brian Lalor Used with permission

Sunday, March 11, 12

Page 36: HTML5 Touch Interfaces: SXSW extended version

Why you can’t use native Pinch to

Zoom

Sunday, March 11, 12

Page 37: HTML5 Touch Interfaces: SXSW extended version

First:Use Matrix TransformsMinimize DOM touches, make your transforms simpler in the long run

Sunday, March 11, 12

Page 38: HTML5 Touch Interfaces: SXSW extended version

http://xkcd.com/184/

Sunday, March 11, 12

Page 39: HTML5 Touch Interfaces: SXSW extended version

It’s Not That Hard!

transform:matrix(1, 0, 0, 1, 10, 10);

Translate

Scale

Sunday, March 11, 12

Page 40: HTML5 Touch Interfaces: SXSW extended version

[ [1,0,0,0], [0,1,0,0], [0,0,1,0], [tx,ty,tz,1]]

With Hardware Acceleration... (matrix3d)

Sunday, March 11, 12

Page 41: HTML5 Touch Interfaces: SXSW extended version

Transforms keep complex state

without DOM reads

Sunday, March 11, 12

Page 42: HTML5 Touch Interfaces: SXSW extended version

What is happening?

•Determine Center of the touch points

•Determine the scale factor (touch.scale)

• Scale the element by the scale factor, with the center of the touch points as the scale center

Sunday, March 11, 12

Page 43: HTML5 Touch Interfaces: SXSW extended version

The Naive Example

Sunday, March 11, 12

Page 44: HTML5 Touch Interfaces: SXSW extended version

The Naive Example

Sunday, March 11, 12

Page 45: HTML5 Touch Interfaces: SXSW extended version

The Naive Example

Sunday, March 11, 12

Page 46: HTML5 Touch Interfaces: SXSW extended version

The Right Example

Sunday, March 11, 12

Page 47: HTML5 Touch Interfaces: SXSW extended version

The Right Example

Sunday, March 11, 12

Page 48: HTML5 Touch Interfaces: SXSW extended version

The Right Example

Sunday, March 11, 12

Page 49: HTML5 Touch Interfaces: SXSW extended version

Breakdown

Sunday, March 11, 12

Page 50: HTML5 Touch Interfaces: SXSW extended version

Breakdown

Sunday, March 11, 12

Page 51: HTML5 Touch Interfaces: SXSW extended version

Breakdown

Sunday, March 11, 12

Page 52: HTML5 Touch Interfaces: SXSW extended version

Breakdown

Sunday, March 11, 12

Page 53: HTML5 Touch Interfaces: SXSW extended version

translateX = scalePointX * (newWidth - oldWidth)

newWidth;

Sunday, March 11, 12

Page 54: HTML5 Touch Interfaces: SXSW extended version

Pro Tips

• Beware the virtual pixels

•Moving the transform-origin won’t really work

•Remember to snap back

Sunday, March 11, 12

Page 55: HTML5 Touch Interfaces: SXSW extended version

Dealing with browsers

Sunday, March 11, 12

Page 56: HTML5 Touch Interfaces: SXSW extended version

Dealing with browsers

Sunday, March 11, 12

Page 57: HTML5 Touch Interfaces: SXSW extended version

Remember Progressive Enhancement?

Sunday, March 11, 12

Page 58: HTML5 Touch Interfaces: SXSW extended version

• Feature Detect

• Add transitions, don’t depend on them

•Gesture interaction is an enhancement, clicks should still work

• Be able to disable features per user-agent, if necessary

Progressive Enhancement

Sunday, March 11, 12

Page 59: HTML5 Touch Interfaces: SXSW extended version

The Tool Chain

Sunday, March 11, 12

Page 60: HTML5 Touch Interfaces: SXSW extended version

The dumbest thing that works

Webkit Browser with UA Spoofing

Sunday, March 11, 12

Page 61: HTML5 Touch Interfaces: SXSW extended version

Weinre

Remote webkit debugger.

http://phonegap.github.com/weinre/

Sunday, March 11, 12

Page 62: HTML5 Touch Interfaces: SXSW extended version

Internet Sharing + Charles Proxy

•Watch HTTP traffic

• Add breakpoints in ajax requests

• Serve web pages to your phone from your computer

Sunday, March 11, 12

Page 63: HTML5 Touch Interfaces: SXSW extended version

Adobe Shadow

•Wrapper for Wienre

•Neat

•Has some limitations

Sunday, March 11, 12

Page 64: HTML5 Touch Interfaces: SXSW extended version

Pile of Devices

Sunday, March 11, 12

Page 65: HTML5 Touch Interfaces: SXSW extended version

Pile of Devices• iPad 1

• iPhone 3G

• iPhone 4

• Samsung Galaxy S

•HTC Desire

•Galaxy Tab

•Motorola Xoom

•Kindle Fire

•HTC Titan

Sunday, March 11, 12

Page 66: HTML5 Touch Interfaces: SXSW extended version

Device Simulators & Emulators:

Basically Useless.

Sunday, March 11, 12

Page 67: HTML5 Touch Interfaces: SXSW extended version

The Flickr Touch Light Box

Sunday, March 11, 12

Page 72: HTML5 Touch Interfaces: SXSW extended version

Swiping Process

• Event Listener on top level for touch events

•Only visible nodes move via translate3d

•Rebuild next/previous happens when movement stops.

Sunday, March 11, 12

Page 73: HTML5 Touch Interfaces: SXSW extended version

Performance Tricks

• Aggressive Pruning

•Clean off css transforms/transitions

•Write-only DOM.

•Do as little as possible during swipes

Sunday, March 11, 12

Page 74: HTML5 Touch Interfaces: SXSW extended version

Frustrating Limitations

•Retina screen is huge, device memory is small

•Hardware acceleration is a crash festival

• Fighting automatic optimization

http://bit.ly/apple-image-size-restrictionsSunday, March 11, 12

Page 75: HTML5 Touch Interfaces: SXSW extended version

http://www.flickr.com/photos/wafer/5533140316/http://www.flickr.com/photos/latca/2265637876/http://www.flickr.com/photos/spine/1471217194/http://www.flickr.com/photos/williamhook/3656233025/http://www.flickr.com/photos/isriya/4656385586/http://www.flickr.com/photos/yandle/3076451873/http://www.flickr.com/photos/uberculture/6632437677/http://www.flickr.com/photos/blalor/4934146981/http://www.flickr.com/photos/torek/3280152297/http://www.flickr.com/photos/nilsrinaldi/5157809941/

Stephen Woods @ysaw

Image Credits (http://flic.kr/y/kQ5cLh)

http://www.slideshare.net/ysaw/creating-responsive-html5-touch-interfaces

Sunday, March 11, 12