What is zflow?
For more details, please see the blog post
Documentation
Include zflow.css, zflow.js, and jQuery in your web page.
Call the JavaScript function zflow(images, selector), where:
- images is an Array of image URLs to load
- selector is a jQuery selector string or element to load the images into.
Add a HTML markup block to where you'd like the coverflow origin to be placed and add the zflow, tray and centering CSS classes, for example:
<body class="zflow">
<div class="centering portrait">
<div id="tray" class="tray"></div>
</div>
</body>How zflow Works
- Setup - zflow starts by loading each image from the images array. When each image is loaded, we scale the image to fit in a square region, and apply 3D CSS transforms to scale it in place.
- Reflections - zflow then takes the scaled image and creates a Canvas element that contains a gradient alpha mask of the image's reflection (using a "reflect" function to do this) and positions the canvas element in place.
- Touch Controller - zflow creates a TouchController object, who's job is to field touch events from Mobile Safari and calculate an appropriate offset. (TBD - Use Safari's absolute page offsets instead of calculating this by hand)
- Clicking - zflow detects when no move events have been made, and zooms + rotates the focused image forward by setting a "CSS Transition"ed 3D transform on the focused image. Clicking again transitions the image back.
- Inertia - zflow achieves inertia by setting the "transition timing function" of the "tray" to an "ease-out" function, which slows things down. On the touch end event, we calculate the projected velocity and set the tray's target position to that location. CSS Transitions handles the decay in velocity as the transition timing function executes -- slowing the tray down gradually.
Performance Considerations
zflow tries to do very little calculation, and touch as few transforms as possible to avoid redraw. Several techniques are used here, but lacking a proper profiler, most of these speed gains have been through trial and error.
- We use the CSS transition timing function to decay the velocity of the tray instead of calculating this by hand. Per frame approaches ended up being unacceptably slow on the iPhone.
- We modify the tray's transform instead of each image's 3D transform
- We cache the last transform set on each image, and only set the CSS Transform when the transform has changed.
I love this on the iPhone, but it didn't work on my Google Android. The images load but the touch functionality is not :(
I'm also wondering if Apple are ok with this? (http://en.wikipedia.org/wiki/Cover_Flow)
Any further info on these subjects would be massively appreciated, thanks, James
Excuse my English :-( Is it possible to place a link to the image center redirriger to a specific page at the click, for replacing the actual Clicking action ?
thank you very much
Hi and thank you for the wonderfull tool! But now i have a question to you and i'll hope you can help me … I tried to modify your tool a bit. In stead of scaling the image while rotating it i would like to change the image to a second one (like a "backside image"). Is it possible to load a second image when the user clicks on an image?
Thank you very much, roman
Instead of creating the reflection of the image with javascript: why not reflecting it with the built-in reflection of mobile Safari ?
I added this to the css file and it works like a charm :)
.zflow div.cell img {
}Hey men name of music plis! come on!
I there tremendous plugin, Im also interesting in build in it for Android, but honestly I dont know were to start can you give a something in why does not work?
It doesn't work in Android below 3.0, because the webkit builds for android have broken 3d css transformations
Hi, I can't change the images ! :( please help me ! :'(