前端之家收集整理的这篇文章主要介绍了
jQuery制作图片旋转效果,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以前用JQuery写过一个纵深方向上的图片旋转效果,在这里拿出来跟大家分享下,贴上一张图片看看效果是如何的:
其实现原理并不复杂,在数学上只用到了其中的正弦函数,制作过程大致如下:
(1)先定义好图片旋转的半径
(2)图片旋转的过程需要用到setInterval()方法,来获取每一张图片所在位置的的角度,角度会根据时间变化逐渐变化
(3)根据一个数学公式:x=R*SIN(deg)可以获得图片在X方向的位置
(4)透明度的设置其实也是根据图片旋转时候的角度来定的。初始设置图片在正前方时是0度,无论是正时针还是逆时针方式旋转,当图片旋转角度大于0度
小于180度时图片的透明度是逐渐减小的,这里为了图片在180度时不至于完全透明加了个小小的计算公式,代码会在下面展示。
(5)图片的缩放也是根据图片旋转角度而定的,相信容易理解。
(6)有了图片的X轴位置信息,缩放信息,透明度信息后,接下来就是很简单的事情了,只要将所有的信息通过CSS样式显示出来就可以了。
css的样式会通过setInterval()方法逐渐改变。
下面来看下主要代码:
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样式:
第五行的opacity用了一个简单的公式使其在最深度时不至于完全透明。
在功能上我加了左右转的功能,其原理也就是将图片的X轴信息的正负值转换而已,代码如下:
整个效果中用户可以自定义一下参数:
下面附上效果的完整代码:
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);
在HTML中只需要有一个DIV包含你所需要的图片就可以完成这个效果,例如: