我最近碰巧需要在圆圈中为某个元素制作动画。在此之前,我从未想过 jQuery 还没有为此提供一个明显的解决方案。因此,我找到了一种方法,并将其做成了一个插件。

有了这个插件,这匹独角兽可以向后飞翔。
赋能理念
这是一个 jQuery 插件,因此显然它依赖于 jQuery 库。具体来说,是 jQuery 1.4 或更高版本,因为我们使用的是 .animate() 函数的新功能,即可以 按属性设置缓动效果。这意味着我们可以使用一个缓动函数为“top”值制作动画,同时使用另一个缓动函数为“left”值制作动画。关于缓动效果的所有这些讨论……我应该说,这不仅需要 jQuery 1.4+,还需要 缓动插件。以下是其原理
因此,如果我们执行四次此操作,翻转缓动函数并根据需要进行加减,我们就可以得到一个圆圈。实际上,不仅仅是圆圈,而是由高度和宽度定义的任何椭圆。
功能
您可以声明速度、高度和宽度。对于像这样的插件,这些参数非常明显/标准/预期。不过还有另外三个参数
- sizeAdjustment:百分比调整。默认为 100(保持不变)。小于 100 = 在中途缩小到该百分比,然后恢复。大于 100 = 在中途增大到该百分比,然后减小。
- loop:默认为 false。True 表示循环将递归运行。您可以通过仅使用单个字符串参数在该元素上调用插件来停止当前循环:$(“#thing”).circulate(“stop”);
- zIndexValue:接受四个数值的数组。这些值在动画的四个点上设置 z-index CSS 属性。
以下是完整集合
$("#anything").circulate({
speed: 400, // Speed of each quarter segment of animation, 1000 = 1 second
height: 200, // Distance vertically to travel
width: 200, // Distance horizontally to travel
sizeAdjustment: 100, // Percentage to grow or shrink
loop: false, // Circulate continuously
zIndexValues: [1, 1, 1, 1], // Sets z-index value at each stop of animation
});
测试版
按现状,我将称之为测试版发布。主要是因为它在 Opera 中运行效果不佳。如果有人是 Opera 的忠实粉丝并且想要找出问题所在,我洗耳恭听。
它也是测试版,因为我还没有收到很多反馈,所以我希望对收到的任何反馈做出反应,并在必要时进行更改。例如,我认为回调函数参数可能是个好主意。此外,我相信有些部分可以写得更高效一些。
太棒了!
太棒了,太神奇了,以前从未见过,以前从未想过。
您的演示非常完美。一切都以某种方式移动。
我用彩色球玩了几分钟。
太棒了……
感谢您提供此类内容..
绝对的
我喜欢使用多个动画参数,从视觉上看它也很不错,但在现实中我该如何使用它?这是一种新奇事物。旋转的独角兽和球体非常适合 1997 年左右的 Geocities。
一开始我也是这样看的,
但已经存在一个类似的 jQuery 插件。
我们将其用于在我们的个人资料页面上选择头像的轮播。
它们不必自动移动,可以逐个进行动画处理,例如使用左右按钮。
仍然具有弧形动画,就像它确实是一个旋转木马,而不仅仅是在不可见的墙壁后面左右滑动。
我们使用的插件是这个
http://fredhq.com/projects/roundabout/
另一个可能的用途可能是像 jQuery 网站上那样的项目轮播
http://jquery.org/
不错的插件!现在——让我们也让容器内的内容也动起来吧!:-) 你真是太棒了。
这绝对需要优化。运行此插件时,CPU 使用率从 8% 上升到 30-50%。
Rob,你说得对。我检查了 CPU 使用率,它确实在增加。
好吧,它并不完全是 Flash ;-),但我的处理器确实从 5% 上升到了 22%。这是在“CRAZY”示例循环的情况下。我使用的是 64 位 Core i5。此外,“CRAZY”会变成“CRAZ Y”有时还会变成“CRA ZY”,具体取决于循环持续时间。我不确定在哪里或如何使用它,但很棒的东西,Chris!
需要插件。
太神奇了!!!
这就是我相信上帝的原因
在 1024×768 分辨率下,在循环的某个时刻会出现水平滚动条,然后逐渐缩小直至消失。
您可以使用具有 overflow:hidden 的容器 div 来修复它。只需在开始时和调整大小时将容器调整为窗口的宽度和高度即可。=)
这太疯狂了,我刚尝试在 CSS3 中实现此功能(令人惊讶的是,这并不难)。干得好!
请分享!我想您可以使用 CSS3 过渡来调整 top/left 值,但我不知道您可以设置按属性的缓动效果。您有演示吗?
我个人从您的网站中学到了很多东西。
干得好……
您是否征得 Smashing Magazine 的许可来窃取其徽标中的“G”?:-)
他可能没有注意到他们的“G”与他的“C”相似
Smashing 是谁?
现象级!这进一步缩小了 JS 和 Flash 之间的差距。
你真是个聪明人,Chris。
令人印象深刻。我非常喜欢 3 个球(底部)的演示。太酷了。
我认为这是我见过的最荒谬的 jQuery 插件示例之一。我爱死它了 lol
看起来不错!!
但与其他浏览器相比,IE7 中的效果并不理想
太棒了!我刚刚观看并感到惊叹。我迫不及待地想开始学习 jQuery..但仍然有很多关于 CSS 的东西需要学习。!你太棒了,Chris!
哈哈……我爱那匹独角兽!
太棒了。
我忍不住笑了,但这太棒了。干得好。
真是个好主意!!!
这绝对是我在这个网站上见过的最令人印象深刻的东西。做得很好!
看起来棒极了,Chris!你查看过jquery.path 属性吗?
http://http://blog.parkerfox.co.uk/2009/09/22/bezier-curves-and-arcs-in-jquery/
ps easing也可以用在他们的例子中
大家有什么导航的想法吗?哈哈,Chris,做得非常好
IE令人失望
我必须承认,最近你的一些文章并没有像以前那样吸引我,因为它们与我的个人旅程不太相关。但这篇文章绝对精彩,我认为它可能会彻底改变我对网站的使用方式。
动画流畅且看起来很棒。jQuery是我一直想提高知识水平的东西,而你让它变得如此有趣。
伙计,你有时真的会超越自己。为你点赞,兄弟。
它必须是一只独角兽……
哇!这个不错,使用 jQuery 进行动画。
几天前我瞥见了这个(我想你在页面底部的对话气泡中提到了它)。有两件事引起了我的注意
1) 在三个球体上,在过渡缓动集合(或任何你想叫它们的东西,例如,在圆圈的前/顶部和后/底部)之间时,有一个明显的“凸起”。侧面过渡看起来很平滑,可能是因为它们的角度更大。
2) 对于文本,如果你让它旋转一段时间,字母开始独立循环。我不确定这是不是故意的——我可以想到一些情况下它会很巧妙,而另一些情况下它绝对是不希望的。
总的来说看起来很酷!
…顶部的散射圆圈也很酷——我很想知道它们是如何工作的。
独角兽太棒了!
哈哈,我的意思是演示。
我的网站上有 lightbox2 插件,我在网站中添加了独角兽插件,但它无法与 lightbox 插件一起使用。我是否需要在其中一个插件中编写一些内容来解决此问题?我想让一个飞碟代替独角兽旋转。
谢谢!
哇!这就是为什么我认为你是原力大师的原因!我是你的学徒!顺便问一下,Chris,我们从你这里获得的这些免费资源?我们可以在我们的网站上使用它们吗?因为我想使用这里的一些东西,并且很乐意在代码和我的网站上添加对你的确认,并链接到你的网站……
同意 Rob 的观点
这占用了我 35% 的 CPU
但效果非常棒 ^^
使用 Google Chrome 和配备 3GB 内存的四核 PC,它只使用了 7% 的 CPU :)
是的,Chrome 似乎获得了更好的性能!
不错!
也许可以使用 SVG,这样独角兽就不会那么锯齿状了?
hohohohoho……我们可以让某样东西像苍蝇一样飞……
酷
..先生。你制作了很棒的效果..谢谢分享
哇!这太棒了!!尽管如此,我只能看到一些客户要求一个旋转的地球仪徽标,但这次是围绕网站旋转的!哈哈!离远点!!!
很棒的插件,Chris!
哇……这东西让我着迷!在某种程度上有点舒缓。酷。我迫不及待地想学习 jQuery!
我总是喜欢你的网站。谢谢。
这可以做一个非常酷的投资组合页面。如果您可以将其设置为所有投资组合项目都像独角兽图像一样,只需关闭循环并添加“下一个”和“上一个”按钮来循环浏览投资组合。
哈哈,不用理会我的上一条评论。刚发现这个
http://www.professorcloud.com/mainsite/carousel.htm
只是在玩 JS
http://weno.com.br/experiment/panda_abacaxi/
非常棒的插件,Chris!干得好!
月球绕行星运行
我有一个想法并尝试了一下。成功了(有点),但我才刚刚学习 jQuery,所以有一些事情我不知道如何解决。
链接
1) 在轨道的底部,月球的轨道变得不稳定。我不知道为什么,也不知道如何修复。
2) 因为我“伪造”了一个图像围绕另一个(正在运行的)图像运行,方法是将所有内容包装在 s 中并循环它们,所以我无法调整图像大小。也不知道如何修复那个。
如果有人有解决这些问题的想法,我很乐意听取!
-谢谢
这很有趣
Atom!
老实说,我甚至没有想过让东西围绕其他正在运行的东西运行。我很高兴它运行得如此流畅!非常酷!
很酷的效果……但我希望看到你是如何做到的,而不是使用插件!
下载文件,你就可以自己查看了
: )
关于 Opera 的错误
问题在于,Opera 中 left 和 top 的计算值是根据项目在其静态位置(而不是规范中在静态情况下所说的自动或 Firefox 所做的零)中是否绝对定位来计算的。当动画开始时,这会导致它们偏移此数量,因为 jQuery 使用此作为起始值。这基本上意味着,如果您将要循环的项目定位在相对/绝对布局框的左上角,则动画在 Opera 中会起作用。
我总是期待你的 alt 标签..就像独角兽上的那个..
对我来说,这是 Flash 棺材盖上的又一枚钉子..干得好
Kevin
太棒了。顺便说一句,在这篇文章发布之前,我在 delicious 上看到了演示页面并将其添加了书签。后来当我搜索此博客上的 circulate 时,我找不到任何帖子。我想知道,人们之前是如何知道这个的。不管怎样。很棒的工作。 :)
这非常酷。我曾经尝试使用 jQuery 和 CSS3 创建一个圆形拖放菜单,方法是将角度从 0 更改为 360 度,并在 JS 中使用数学函数在极坐标和直角坐标之间进行转换。它没有完全奏效。
如果我没有记错的话,你的方法的一个限制是无法在循环中途暂停动画并从同一点恢复。如果缓动函数重置为零,则暂停的对象将以新的旋转中心恢复。
真的很酷。我希望能够在“圆圈中途”停止……思路是..“当单击 (x) 时,沿 (x) 的椭圆动画 (x) 和 (x),你实际上是在沿弧线交换两个图像与另一个图像。”