当前位置:首页 > 日记 > 正文

jQuery制作旋转效果

jQuery制作旋转效果

以前用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); }

整个效果中用户可以自定义一下参数:

$.fn.scroll3d.defaults={ speed:25, radius:100, width:200, height:150, direction:'left'  }

下面附上效果的完整代码:

(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", "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", "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 }); 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.webp" /> <img src="img/2.webp" /> <img src="img/3.webp" /> <img src="img/1.webp" /> <img src="img/2.webp" /> </div>

代码的调用可以这样写:

$('.holder').scroll3d();

写的有点乱七八糟,还望各位见谅!

压缩包:test_jb51.rar

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关文章

怎样将word转换成PPT格式

怎样将word转换成PPT格式

步骤,转换成,格式,电脑软件,word,  在日常的工作生活中,我们经常需要借助于Word办公软件来编辑、打印文档材料。许多时候,我们可能还需要将已经编辑好的Word文档打印出来,然后制做成PowerPoint格式演示文稿,以便进行演示。不过,我们在Powe…

微信读书如何添加本地文件?

微信读书如何添加本地文件?

本地文件,电脑软件,  微信读书是一款可以看到朋友圈好友阅读时间及最近阅读书籍的应用软件,很多下载了该应用的朋友们都不清楚怎么将本地图书导入到微信读书里面,针对此问题,本文就为大家进行解答。微信读书如何添加本地文件  微信读书刚…

微信小程序中使用javascript 回调

微信小程序中使用javascript 回调

回调函数,程序,电脑软件,微信小,javascript, 微信小程序中使用javascript 回调函数回调函数原理:我现在出发,到了通知你” 这是一个异步的流程,“我出发”这个过程中(函数执行),“你”可以去做任何事,“到了”(函数执行完毕)“通知你”(回调)进行之后…

ppt自选图形在哪怎么插入

ppt自选图形在哪怎么插入

图形,方法,电脑软件,ppt,  在ppt设计和制作中常常需要插入图形,为了更好地实现自己想要的效果,我们可以在ppt中插入自选图形,下面就让小编告诉你 ppt2013如何插入自选图形的方法,不懂的朋友会请多多学习ppt哦。ppt2013插入自选图形的方法打开…

在点击div中的p时,如何阻止事件冒泡

在点击div中的p时,如何阻止事件冒泡

事件冒泡,电脑软件,div,今天整理笔记,发现在学习javaScript的过程中,遇到过一个在当时看来很棘手的问题,现在特地总结一下,也希望能帮助到曾像我一样迷惘的初学者。我还是以一个案例来说明问题,html代码如下:<div onclick="show('a')"> <p …

微信中的视频怎么下载下载微信视频

微信中的视频怎么下载下载微信视频

下载,方法,信中,视频,下载方法,  有时候在微信中遇到一些好玩的或者有趣的视频,想下载下来,那么如何操作呢?下面是小编为大家整编的下载微信视频的方法,大家快来看看吧。微信中的视频下载方法1、在微信中打开你想要下载的视频下载微信视频的…

Jquery EasyUI $.Parser

Jquery EasyUI $.Parser

电脑软件,Jquery,EasyUI,Parser,Parser(解析器)对象的属性和方法:使用:<link href="~/jquery-easyui-1.5.2/themes/bootstrap/easyui.css" rel="external nofollow" rel="stylesheet" /> <script src="~/jquery-easyui-1.5.2/jquery.mi…

浅谈js停止事件冒泡 阻止浏览器的

浅谈js停止事件冒泡 阻止浏览器的

默认,事件冒泡,浏览器,连接,浅谈,在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。1..停止事件冒泡JavaScript代码//如果提供了事件对象,则这是一个非IE浏览器if ( e && e.stopPropagation…

ps怎么画门面店铺图标? ps画简单店

ps怎么画门面店铺图标? ps画简单店

教程,图标,店铺,门面,简单,想要设计一个门前有遮阳棚的店铺,该怎么设计呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、先用矩形工具绘制出一个长长的矩形,我们选择用深…

JavaScript 中的 this 简单规则

JavaScript 中的 this 简单规则

规则,简单,电脑软件,JavaScript,几条规则确定函数里的 this 是什么。想确定 this 是什么其实非常简单。总体的规则是,通过检查它的调用位置,在函数被调用的的时候确定 this。它遵循下面这些规则,接下来以优先级顺序说明。规则1、如果在调用函…

ps cs6怎么给照片添加阴影线效果?

ps cs6怎么给照片添加阴影线效果?

照片,效果,电脑软件,ps,一张数码照片制作成阴影线效果。软件名称:Photoshop CS6 13.0 破解版 中文绿色免费版 (PSCS6中文绿色版)软件大小:160MB更新时间:2014-05-151、启动软件,打开一张图片。 2、菜单栏依次选择&rdquo;图像&ldquo;&mdash;&mda…

Visual Studio for Mac版 初体验

Visual Studio for Mac版 初体验

初体验,电脑软件,Visual,Studio,Mac,你喜爱的 IDE,现在可用于 Mac。因为在 Visual Studio for Mac 之前,已经有了 Visual Studio Code for Mac,那时候我们还以为 Visual Studio Code 就是 Visual Studio 的跨平台版本,但事实微软并不是这样想的…