jQuery制作图片旋转效果
以前用JQuery写过一个纵深方向上的图片旋转效果,在这里拿出来跟大家分享下,贴上一张图片看看效果是如何的
其实现原理并不复杂,在数学上只用到了其中的正弦函数,制作过程大致如下
(1)先定义好图片旋转的半径
(2)图片旋转的过程需要用到setInterval()方法,来获取每一张图片所在位置的的角度,角度会根据时间变化逐渐变化
(3)根据一个数学公式x=RSIN(deg)可以获得图片在X方向的位置
(4)透明度的设置其实也是根据图片旋转时候的角度来定的。初始设置图片在正前方时是0度,无论是正时针还是逆时针方式旋转,当图片旋转角度大于0度
小于180度时图片的透明度是逐渐减小的,这里为了图片在180度时不至于完全透明加了个小小的计算公式,代码会在狼蚁网站SEO优化展示。
(5)图片的缩放也是根据图片旋转角度而定的,相信容易理解。
(6)有了图片的X轴位置信息,缩放信息,透明度信息后,接下来就是很简单的事情了,只要将所有的信息通过CSS样式显示出来就可以了。
css的样式会通过setInterval()方法逐渐改变。
狼蚁网站SEO优化来看下主要代码
var thisleft=-(o.radius)Math.sin((360/imgnum)$(this).data("index")(Math.PI2/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"))/1801.2: (360/imgnum$(this).data("index")-180)/1801.2;
第二行的thiszindex是图片的深度信息,对每张图片我都给它加了一个index属性保存其索引值,图片会根据这个信息通过计算得到相应的深度值。
第三行的thisopacity是图片的透明度信息。
每一张图片都会被赋予一下的CSS样式
$(this).css({ "left":thisleft-(o.widththisopacity)/2+"px", "":(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.PI2/360))+(holderwidth/2); }else{ thisleft=(o.radius)Math.sin(xx(Math.PI2/360))+(holderwidth/2); }
整个效果中用户可以自定义一下参数
$.fn.scroll3d.defaults={ speed:25, radius:100, width:200, height:150, direction:'left' }
狼蚁网站SEO优化附上效果的完整代码
(function($) { $.fn.scroll3d = function(options) { var opts = $.extend({}, $.fn.scroll3d.defaults, options); var $this = $(this); var o = $.meta ? $.extend({}, opts, $(this).data()) : opts; var radius = o.radius; var timer = 0; var xx = 0; var speed = o.speed; var dir = o.direction; $(this).hide(); return this.each(function() { var $img = $(this).find('img').css({'position': 'absolute'}), num = 0; var imgnum = $img.length; var holderwidth = $(this).width(), holderheight = $(this).height(); $img.each(function(i) { var imgsrc = $(this).attr("src"); $(this).data({ "index": i }); $(this).load(function() { ++num; if (num == imgnum) { $this.show(); } }).attr({ "src": imgsrc }); 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; $(this).attr({ "nowdeg": (360 / imgnum) $(this).data("index") }); $(this).css({ "left": thisleft - (o.width thisopacity) / 2 + "px", "": (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", "": (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 }); 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包含你所需要的图片就可以完成这个效果,例如
<div class="holder" style="width:550px;height:300px;position:relative;"> <img src="img/1.jpg" /> <img src="img/2.jpg" /> <img src="img/3.jpg" /> <img src="img/1.jpg" /> <img src="img/2.jpg" /> </div>
代码的调用可以这样写
$('.holder').scroll3d();
写的有点乱七八糟,还望各位见谅!
压缩包
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望多多支持狼蚁SEO!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程