Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 计算径向菜单的角度_Jquery_Css_Math_Geometry - Fatal编程技术网

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都有固定的宽度,因此剩余的空间被视为它们之间的一个边距。试着缩小和增加宽度……你会明白的。