Jquery 计算径向菜单的角度
我正在处理一份。我发现菜单项(Jquery 计算径向菜单的角度,jquery,css,math,geometry,Jquery,Css,Math,Geometry,我正在处理一份。我发现菜单项(li)的对齐是使用第n个子菜单项的pseudo选择器和rotate属性完成的。我在演示中面临的问题有: 菜单项的数量是固定的。在我计划使用它的页面上,菜单项的数量是动态的,因为它会随着用户的不同而变化 它的方向是180度,而我希望它是一个完整的360度 为了克服这些问题,我决定使用jQuery计算菜单项的数量,然后对每个项应用适当的rotate值 在调查CSS时,我发现在7个菜单项的情况下,旋转角度值为: -第一个孩子20度 第二个孩子12度 第三个孩子44度
li
)的对齐是使用第n个子菜单项的pseudo选择器和rotate
属性完成的。我在演示中面临的问题有:
- 菜单项的数量是固定的。在我计划使用它的页面上,菜单项的数量是动态的,因为它会随着用户的不同而变化
- 它的方向是180度,而我希望它是一个完整的360度
为了克服这些问题,我决定使用jQuery计算菜单项的数量,然后对每个项应用适当的rotate
值
在调查CSS时,我发现在7个菜单项的情况下,旋转角度值为:
- -第一个孩子20度
- 第二个孩子12度
- 第三个孩子44度
- 第四个孩子76度,以此类推
总之:
-第一个孩子20度,接下来的6个孩子继续增加32度
现在我正努力弄明白背后的数学原理。我希望根据菜单项的数量动态计算这些值。我应该使用什么公式为每个孩子获得合适的角度?计算菜单项的数量。
所以你想在他们之间分360d。
只需划分,您就可以理解每个菜单项的级别
var each_item_degree = 360 / number_of_items;
您应该将每个项目从第一个子项添加到最后一个子项。
它会给你想要的,但没有任何利润。对于它们之间的边距,您可以轻松地从360减去总边距,
例如,如果7个项目是32d,从-20到12开始,则从15d开始下一个项目。它给你3d的边距。
祝你好运。我们可以用一点代数算出这个公式。让我们做吧
线性截面
假设我们有一个数量y
,我们想将其分成n
大小x
的部分,这些部分由大小p*x
的间隙隔开
如果除最后一个部分外,每个部分后面都有间隙,则存在n-1
间隙
因此,我们:
n*x + (n-1)*p*x = y
(n + (n-1)*p) * x = y
x = y / (n + (n-1)*p)
例如,如果数量为180,我们希望制作7个大小为x
的部分,用大小为0.1*x
的间隙隔开,我们得到:
x = 360 / (7 + 6*0.1)
= 23.6842
x = 360 / (7 + 0.1*7)
= 46.7532
现在让我们考虑从每个部分开始到下一个的总距离。< /P>
如果一节从位置
t0
开始,则下一节从位置t1
开始,以便:
t1 = t0 + x + p*x
继续上面的数字,我们得到:
t1 = t0 + 23.6842 + 0.1*23.6842
= t0 + 26.0526
现在我们知道,该段的起点相距26.0526个单位,每个段的长度为23.6842个单位
圆形截面
如果我们要细分的数量是圆形的,那么计算是不同的,因为最后一个部分和第一个部分也被一个间隙隔开。换句话说,圆圈中有n
间隙
现在我们有:
n*x + n*p*x = y
(n + n*p) * x = y
x = y / (n + n*p)
因此,如果我们将360度划分为7个大小为x
的部分,间隙为0.1*x
,我们得到:
x = 360 / (7 + 6*0.1)
= 23.6842
x = 360 / (7 + 0.1*7)
= 46.7532
这是一个区段的大小。一段的起点t0
与下一段的起点t1
之间的距离为:
t1 = t0 + x + p*x
= t0 + 46.7532 + 0.1*46.7532
= 51.4285
总之,从每个部分的起点到下一部分的起点的距离为51.4285,每个部分的长度为46.7532。但在上面链接的示例中,每个项目的角度将达到180/7===>25度。但应用于每个项目的度数为32度
。那么,当每个项目的左边距属性为-10em
亲爱的@asprin时,为什么会增加7度呢?很明显,这不是180度。。更多。。仔细看看。。菜单项覆盖了大半个圆圈…大约2/3…@asprin左边的空白与效果完全无关。!检查菜单项删除样式你会理解我说的。你说得对。只有一个疑问。在上面的示例中,如果我使用50(360/7~51)
度而不是32度,则对齐调整非常完美。我甚至不需要考虑每个代码 使用的余量。这怎么可能?@asprin。原因是:每个li都有固定的宽度,因此剩余的空间被视为它们之间的一个边距。试着缩小和增加宽度……你会明白的。