Vandaag een breakdown van de swipe-events in de photo gallery die we op onze mobiele website gebruiken.
Verwacht niet een line-to-line breakdown, maar alleen de wijzigingen die
hebben moeten doen om van onze more-or-less statische versie een versie
te maken die swipe events ondersteunt.
Let's get it started Omdat we gebruik willen maken van de 'touchmove' events gebruiken
we een zelfgeschreven jQuery plugin die de interface iets handiger maakt:
jquery.(s)wipe.js. De syntax voor deze plugin is:
We kunnen aan deze events functies koppelen waardoor we alle logica voor
het swipen op één plaats hebben.
Verschillende manieren voor animaties Om de animaties te maken hebben we een aantal manieren geprobeerd:
1. Voeg twee extra afbeeldingen toe aan de DOM, 1 links van je huidige
afbeelding, 1 rechts van je huidige afbeelding. Zet hier een container
omheen, en positioneer deze absoluut met de CSS property 'left'.
Nadat de animatie klaar is verwissel je de afbeeldingen.
2. Teken de afbeeldingen die zichtbaar zijn (bij naar rechts slepen de
vorige en de huidige) op een canvas.
3. Doe 1. maar dan i.p.v. met 'left' met '-webkit-transform'
Al deze manieren hadden hun quircks. 1. performt redelijk in portrait
mode op iPhone en Android; maar slecht in landscape, en dramatisch op Blackberry
OS 6. 2 Performt dramatisch op iOs vanwege de slechte kwaliteit van hun
Canvas implementatie. 3 werkt goed op iPhone, Android en BB OS 6; maar
niet als je op de iPhone in landscape mode draait, want dan komen er flikkeringen.
Ook waren er in eerste instantie flikkeringen tijdens de animatie in iOS
4.2 en hoger (en niet in 4.1) wanneer je de CSS prop '-webkit-backface-visibility'
niet zette naar 'hidden'. Zucht. Uiteindelijk hebben we op de
laatste dag alles toch nog smooth gekregen door de volgende methode te
gebruiken:
Teken voor elke afbeelding voor een object een <img/> tag, en zet
deze in een container. Positioneer de container met '-webkit-transform'.
De afbeeldingen worden uiteraard niet allemaal ingeladen; dat doen we pas
als we verwachten dat we de afbeelding nodig gaan hebben.
N.B. We doen nu alleen webkit omdat iOS, Android en BB OS 6 allen een webkit browser hebben. Wanneer we ook Phone 7 gaan ondersteunen voegen we ook normale CSS3 transforms toe.
Breakdown De volledige javascript voor de gallery is hier te vinden. Het toevoegen van alle <img/>'s
vind je op regel 341. Op regel 26 doen we de eerste test, namelijk het
controleren of we webkit transforms supporten:
Op regel 311 gaan we hier uiteindelijk iets mee doen, in de 'herpositioneer'
functie:
We haken nu in op de swipe plugin om de container te verplaatsen als iemand
met zijn vinger over het scherm gaat (regel 226).
Omdat we ook via de thumbs onderin kunnen navigeren hebben we in onze
refresh() functie een 'smooth' parameter nodig die doorgegeven
wordt door next() en previous() (zie vorige functie). Regel 113:
There are 14 comments on this article, read them on
Coding Glamour.