/ Published in: jQuery
                    
                                        
After giving a try with the Windows 8 Developer Preview i asked myself if i could reproduce the on click effect of the metro UI in a webpage.
Sadly, for what i know at this time CSS3 3d transformations works only on webkit browsers, so this is nothing more than a code exercise with no real job usefulness. Anyway, here it is: if you click on one of the big squared link they tilt in the direction of the nearest border and if you click exactly in the center they perform a reducing effect. If you try it in firefox or opera only the reducing effect works.
EXAMPLE: http://claudiobonifazi.com/snippets/metro_click/
                Sadly, for what i know at this time CSS3 3d transformations works only on webkit browsers, so this is nothing more than a code exercise with no real job usefulness. Anyway, here it is: if you click on one of the big squared link they tilt in the direction of the nearest border and if you click exactly in the center they perform a reducing effect. If you try it in firefox or opera only the reducing effect works.
EXAMPLE: http://claudiobonifazi.com/snippets/metro_click/
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
/*
* metro.js - Win8 Metro UI onclick effect [v1.0]
* Distributed under the Do-wathever-the-hell-you-want-with-it License
*
* Web site: http://claudiobonifazi.com
* Blog: http://claudiobonifazi.com?p=4
* Email: [email protected]
* Twitter: @ClaudioBonifazi
*/
(function($){
$.fn.metroClick = function( e, callback ){
var el = $(this), origin = 0, ang = 10, orizorvert = 0, duration = 200, anim,
mouse = {x:e.pageX-el.offset().left,y:e.pageY-el.offset().top};
// for a better antialiasing
if(el.css('box-shadow')=='none')
el.css({'box-shadow':'0 0 1px transparent'})
// needed to define how much links should tilt
el.parent().css({'-webkit-perspective':el.outerWidth()*5})
//identify mouse position relatively to the clicked box
if( mouse.x < el.outerWidth()/3 ){
orizorvert = 1 // left
origin = 100
ang = -ang
}else if(mouse.x > parseInt(el.outerWidth()*2/3)){
orizorvert = 1 // right
}else{
if(mouse.y < el.outerHeight()/3){
orizorvert = 2 // center-top
origin = 100
}else if(mouse.y > parseInt(el.outerHeight()*2/3)){
orizorvert = 2 // center-bottom
ang = -ang
}
}
return $.each(el,function(i,e){
if( orizorvert > 0 && $.browser.webkit)
$(e).css({'-webkit-transform-origin':(orizorvert==1 ? origin+'% 0%' : '0% '+origin+'%')})
.animate({'z-index':$(e).css('z-index')},{duration:duration,step:function(now,fx){
anim = ang*Math.sin((fx.pos*Math.PI))
$(e).css({'-webkit-transform' : 'rotate'+(orizorvert==1 ? 'Y':'X')+'('+anim+'deg)'})
},queue:false}).delay(duration)
else if(orizorvert==0 || !$.browser.webkit)
$(e).animate({'z-index':$(e).css('z-index')},{duration:duration,step:function(now,fx){
anim = 1-Math.sin(fx.pos*Math.PI)/10
$(e).css({'-webkit-transform' : 'scale('+anim+')',
'-moz-transform' : 'scale('+anim+')',
'-o-transform' : 'scale('+anim+')'})
},queue:false}).delay(duration)
})
}
})(jQuery)
/*
* USAGE :
* $('a').click(function(e){
* $(this).metroClick( e, callback() )
* return false
* })
*
*/
URL: http://claudiobonifazi.com/snippets/metro_click
Comments
 Subscribe to comments
                    Subscribe to comments
                
                