以前用JQuery写过一个纵深方向上的图片旋转效果,在这里拿出来跟大家分享下,贴上一张图片看看效果是如何的:

其实现原理并不复杂,在数学上只用到了其中的正弦函数,制作过程大致如下:
(1)先定义好图片旋转的半径
(2)图片旋转的过程需要用到setInterval()方法,来获取每一张图片所在位置的的角度,角度会根据时间变化逐渐变化
(3)根据一个数学公式:x=R*SIN(deg)可以获得图片在X方向的位置
(4)透明度的设置其实也是根据图片旋转时候的角度来定的。初始设置图片在正前方时是0度,无论是正时针还是逆时针方式旋转,当图片旋转角度大于0度
小于180度时图片的透明度是逐渐减小的,这里为了图片在180度时不至于完全透明加了个小小的计算公式,代码会在下面展示。
(5)图片的缩放也是根据图片旋转角度而定的,相信容易理解。
(6)有了图片的X轴位置信息,缩放信息,透明度信息后,接下来就是很简单的事情了,只要将所有的信息通过CSS样式显示出来就可以了。
css的样式会通过setInterval()方法逐渐改变。
下面来看下主要代码:
var thisleft=-(o.radius)*Math.sin((360/imgnum)*$(this).data("index")*(Math.PI*2/360))+(holderwidth/2);
var thiszindex=360/imgnum*$(this).data("index")>180?360/imgnum*$(this).data("index")-360:-360/imgnum*$(this).data("index");
var thisopacity=360/imgnum*$(this).data("index")<=180?(180-360/imgnum*$(this).data("index"))/180*1.2:
(360/imgnum*$(this).data("index")-180)/180*1.2;第二行的thiszindex是图片的深度信息,对每张图片我都给它加了一个index属性保存其索引值,图片会根据这个信息通过计算得到相应的深度值。
第三行的thisopacity是图片的透明度信息。
每一张图片都会被赋予一下的CSS样式:
$(this).css({
"left":thisleft-(o.width*thisopacity)/2+"px",
"top":(holderheight/2)-o.width*(thisopacity+1)/4,
"z-index":thiszindex+180,
"opacity":(thisopacity+0.2)/1.2,
"width":o.width*(thisopacity+1)/2,
"height":o.height*(thisopacity+1)/2
});第五行的opacity用了一个简单的公式使其在最深度时不至于完全透明。
在功能上我加了左右转的功能,其原理也就是将图片的X轴信息的正负值转换而已,代码如下:
if(dir=='left'){
thisleft=-(o.radius)*Math.sin(xx*(Math.PI*2/360))+(holderwidth/2);
}else{
thisleft=(o.radius)*Math.sin(xx*(Math.PI*2/360))+(holderwidth/2);
}整个效果中用户可以自定义一下参数:










