前端之家收集整理的这篇文章主要介绍了
jQuery制作图片旋转效果,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@以前用JQuery写过一个纵深方向上的图片旋转效果,在这里拿出来跟大家分享下,贴上一张图片看看效果是如何的:
<p style="text-align: center">

@H_
502_0@其实现原理并不复杂,在数学上只用到了其中的正弦
函数,制作过程大致如下:
@H_
502_0@(1)先定义好
图片旋转的半径
@H_
502_0@(2)
图片旋转的过程需要用到setInterval()
方法,来
获取每一张
图片所在位置的的角度,角度会根据时间变化逐渐变化
@H_
502_0@(3)根据一个数学公式:x=R
SIN(deg)可以获得图片在X方向的位置
@H_502_0@(4)透明度的设置其实也是根据图片旋转时候的角度来定的。初始设置图片在正前方时是0度,无论是正时针还是逆时针方式旋转,当图片旋转角度大于0度
@H_502_0@ 小于180度时图片的透明度是逐渐减小的,这里为了图片在180度时不至于完全透明加了个小小的计算公式,代码会在下面展示。
@H_502_0@(5)图片的缩放也是根据图片旋转角度而定的,相信容易理解。
@H_502_0@(6)有了图片的X轴位置信息,缩放信息,透明度信息后,接下来就是很简单的事情了,只要将所有的信息通过CSS样式显示出来就可以了。
@H_502_0@ css的样式会通过setInterval()方法逐渐改变。
@H_502_0@下面来看下主要代码:
<div class="jb51code">
<pre class="brush:js;">
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;
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;
$(this).attr({
"nowdeg": (360 / imgnum) * $(this).data("index")
});
$(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
});
});
function scrollimg() {
$img.each(function() {
var thisdeg = $(this).attr('nowdeg');
var thisleft;
xx = thisdeg;
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);
}
var thiszindex = xx > 180 ? xx - 360 : -xx;
var thisopacity = xx <= 180 ? (180 - xx) / 180 : ($(this).attr('nowdeg') - 180) / 180;
$(this).css({
"left": thisleft - (o.width * thisopacity) / 2 + "px","height": o.height * (thisopacity + 1) / 2
});
xx++;
if (xx > 360) xx = 0;
$(this).attr({
"nowdeg": xx
});
});
};
var tt = setInterval(scrollimg,speed);
$img.hover(function() {
clearInterval(tt);
},function() {
tt = setInterval(scrollimg,speed);
});
});
};
$.fn.scroll3d.defaults = {
speed: 25,radius: 300,width: 200,height: 150,direction: 'left'
}
})(jQuery);