按圆形轨迹排列元素

<div class="box">
	<span>0</span>
	<span>1</span>
	<span>2</span>
	<span>3</span>
	<span>4</span>
	<span>5</span>
	<span>6</span>
	<span>7</span>
	<span>8</span>
	<span>9</span>
	<span>10</span>
	<span>11</span>
	<span>12</span>
</div>

这里的span数量是可以随意增加的

.box{ width: 300px; height: 300px; background: #F3F0F0; position: relative; border-radius: 50%; }
.box::after{ content: ""; width: 300px; height: 300px; background: white; transform: scale(.5); border-radius: 50%; position: absolute; }
.box span{ width: 40px; height: 40px; position: absolute; border-radius: 50%; background: orange; color: white; text-align: center; line-height: 40px; font-weight: bold; }

写css的时候务必注意,中间圆的半径不能超过大圆和小圆的差值

function printRing( bcr , mcr , scr ){
	// bcr 大圆半径,mcr 大圆和小圆之间那个圆的半径(这个圆的直径不能超过大圆半径和小圆半径的差值),scr 小圆半径
	var $span = $("span");
	var len = $span.length;
	var a = Math.PI / 180 ;
	var r = ( bcr - scr ) / 2 + scr; //环形的半径=(大圆半径 - 小圆半径)/ 2 + 小圆半径;
	var angle = 360 / len; //根据span的数量来决定弧度大小
	for( var i = 0 ; i < len ; i++){
		var x="x"+i , y="y"+i;
		var x = bcr + Math.sin( a * angle * i ) * r ;
		var y = bcr + Math.cos( a * angle * i ) * r ;
		$span.eq(i).css({ "left" : ( x - mcr ) + "px" , "top" : ( y - mcr ) + "px"});
	}
}
printRing( 150 , 20 , 75 );

最后来个效果图

时间: 2024-10-06 04:59:24

按圆形轨迹排列元素的相关文章

实现精灵沿着圆形轨迹运动

(原文地址:http://blog.csdn.net/while0/article/details/26008033) 使用样条曲线模拟圆形轨迹,当分割数量足够大时,逐渐逼近圆形. Point pos(100, 100); //start point m_animSprite->setPosition(pos); int count = 8; float angle = 360.f/count; float radius = 50.f; auto array = PointArray::crea

inline-block横向排列元素间隔原因及去除间隔方法

1.问题出现的场景: 需要实现上面的布局,三张图横向排列,左图靠左,右图靠右,中间图居于中间,且图与图之间有固定间隔,起初通过如下方式实现(为了说明方便,直接通过内联样式表现): <div style="width:100%;overflow:auto;"> <div style="width:32%;float:left"><img style="width:100%" src=" "/>

用CSS3和table标签实现一个圆形轨迹的动画

html:其实就是根据table标签把几个实心圆div进行等边六角形的排布,并放入一个div容器中,然后利用CSS3的循环旋转的动画效果对最外层的div容器进行自转实现,当然不要忘了把div容器的外边框设置圆形弧度的. 1 <div class="animation_div"> 2 <table class="table_class"> 3 <tr> 4 <td></td> 5 <td> 6 &

如何用C表示排列组合?

问题来自<Linux C一站式编程>,是个挺有意思的题目. 2.定义一个数组,编程打印它的全排列.比如定义: #define N 3 int a[N] = { 1, 2, 3 }; 则运行结果是: $ ./a.out 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2 程序的主要思路是: 把第1个数换到最前面来(本来就在最前面),准备打印1xx,再对后两个数2和3做全排列. 把第2个数换到最前面来,准备打印2xx,再对后两个数1和3做全排列. 把第3个数换到最前面来,准备打

Johnson-Trotter(JT)算法生成排列

对于生成{1,……,n}的所有n!个排列的问题,我们可以利用减治法,该问题的规模减一就是要生成所有(n-1)!个排列.假设这个小问题已经解决了,我们可以把n插入到n-1个元素的每一种排列中的n可能的位置中去,来得到较大规模大问题的一个解.按照这种方式生成的所有排列都是独一无二的,并且他们的总数应该是n(n-1)!=n!.这样,我们都得到了{1,……,n}的所有排列. JohnsonTrotter算法实现形式. JohnsonTrotter(n) 输入:一个正整数n 输出:{1,……,n}的素有排

计算机算法基础 ——数学(排列组合函数)

一 排列 1.从n个元素中取r个元素排列的全体数目 Pnr=P(n,r)=n(n-1)(n-2)...(n-r+1)=n!/(n-r)!                  :例:n个球取r个放入r个不同盒子,每个盒子一个球,多少种放法 2. n个元素的全排列 Pnn=P(n,n)=n! 3.例:随机选n(n<365)个人,求其中至少有两人生日相同的概率. n个人的生日的序列数:365n n个人生日均不相同的概率:P(365,n) 故:1-P(365,n)/365n 4.圆排列 从n个元素中取r个

从文档流角度理解浏览器页面渲染引擎对元素定位的解析

文档流:将窗体自上而下分成一行一行,并在每行中按从左至右的挨次排放元素,即为文档流. 我们在排列元素时,遵循"流式结构",即元素遵循从上向下,从左向右堆叠的规则,所以我们在排列元素时如果每行从左往右的元素的总宽度大于窗口的宽度时,就会默认换行. 有三种状况将使得元素离开文档流而存在,分别是浮动.绝对定位.固定定位. 浮动时,离开文档流后的元素,不占用文档流的空间,不会被文档流中的元素发现,离开文档流元素后面的还在文档流上元素会自动上来填补位置接上文档流.此时,离开文档流的元素如同浮在文

利用标准库算法求解排列组合

以前求序列的排列时,最常用的方法就是递归回溯,现在发现其实像这样有特定算法的重复性工作是可以在STL标准库中找到答案的. 在STL的变序性算法中,有两个用于排列元素的算法分别如下: bool next_permutation(Iterator beg,Iterator end) bool prev_permutation(Iterator beg,Iterator end) 这两个算法的功能也很简单,next_permutation()会改变区间(beg,end)内的元素次序,使它们符合"下一个

排列递归

递归算法: /** * 求排列(递归) * @param result 最终排列结果 * @param out 已经排列内容 * @param target 需要排列的数据集合 * @param m 排列元素个数 * * 待解决:1 大数据 溢出 () 2 使用多线程提速排列过程 * * */ public static void f(List<String> result, String out, List<String> target, int m) { if(m == 0)