我试图在此jsFiddle 页面上重新创建您要查找的内容。它绝对不是没有错误的,但希望它能帮助你理解制作循环列表所需的 jQuery 和 CSS。
CSS:
a {
position: absolute;
text-decoration: none;
border: 1px solid black;
width:98px;
height:98px;
border-radius:50px;
line-height:100px;
text-align:center;
}
我以绝对方式定位链接,以便我们可以操纵它们的顶部/左侧位置。宽度和高度约为边框半径的一半,这将为每个链接提供圆形形状。css 的其余部分是定位文本。
jQuery代码的开始:
$(function() {
circle_radius = 100;
$links = $('nav ul li a');
total_links = $links.size();
第一个变量circle_radius
是圆形菜单本身的半径(不是各个链接)。
$links
获取您的导航标签中的完整链接列表,并total_links
存储您在该导航中有多少链接。这对于确定每个链接的位置很重要。
更多 jQuery 代码:
$links.each(function(index) {
$(this).attr('data-index',index);
animateCircle($(this), 1);
});
我们要做的第一件事是遍历每个单独的链接,$links
并为其添加一个索引值并调用animateCircle(...)
. 我们传递链接元素本身和另一个值(该值将用于鼠标悬停效果)。
圆形定位:
function animateCircle($link, expansion_scale) {
index = $link.attr('data-index');
radians = 2*Math.PI*(index/total_links);
x = -(Math.sin(radians)*circle_radius*expansion_scale);
y = -(Math.cos(radians)*circle_radius*expansion_scale);
$link.animate({
top: x+'px',
left: y+'px'
}, 200);
}
在animateCircle(...)
中,我们首先获得$link
的索引。然后我们使用一些好的旧三角函数$link
使用索引和链接总数来计算 ' 位置的角度(以弧度为单位)。接下来,我们使用radians
来计算 的 x 和 y 位置$link
。注意,我在expansion_scale
这里调用了一些东西,这是我们传递给这个函数的东西。目前,这只是 1,因此不会影响 x 和 y 值。最后,一旦我们有了 x 和 y 值,我们就$link
可以使用新值对 的顶部和左侧属性进行动画处理。
在鼠标悬停时为圆圈设置动画:
$('li a').hover(function() {
animateCircle($(this), 1.5)
}, function() {
animateCircle($(this), 1)
});
这个效果现在很容易用animateCircle(...)
. 这就是expansion_scale
最终发挥作用的地方。当我们将鼠标悬停在链接上时,它将animateCircle(...)
以expansion_scale
1.5 的值调用,这使得该特定链接比其他链接移动 1.5 倍,从而为您提供简洁的效果。最后,当您移出鼠标时,它会将链接移回其原始位置。