前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >div 环形排列_三个div如何并排

div 环形排列_三个div如何并排

作者头像
全栈程序员站长
发布于 2022-09-19 13:44:30
发布于 2022-09-19 13:44:30
3K01
代码可运行
举报
运行总次数:1
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

javascript-按圆形排列DIV元素(一)—- 分析

效果图:

一、分析图:

绿色边框内:外层的DIV元素,相对定位;

白色圆形框:辅助分析的想象形状;

白点:为白色圆形的圆心点,中心点,点o;

圆心角:角NOG;

黄色:需要按圆形排列的,绝对定位的DIV元素;

红色点:为每个黄色DIV的坐标点;即绝对定位时的元素,left值 和 top值 ,设置的点;

二、涉及到的概念定义:

2.1、弧度:弧度是角的度量单位。

红色部分为弧长,角A为弧长对应的圆心角

弧长等于半径的弧,其所对的圆心角为1弧度。(即两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1)。

根据定义,一周的弧度数为2πr/r=2π,360°角=2π弧度,因此,1弧度约为57.3°,即57°17’44.806”,1°为π/180弧度,近似值为0.01745弧度,周角为2π弧度,平角(即180°角)为π弧度,直角为π/2弧度。

弧长=n2πr/360 (在这里n就是角度数,即圆心角n所对应的弧长。)

========================================================

2.2、正弦值:弦值是在直角三角形中,对边的长比上斜边的长的值。

Math.sin(x) : X 必需。一个以弧度表示的角。将角度乘以 0.017453293 (2PI/360)即可转换为弧度。

================================================

2.3、余弦值:是指直角三角形锐角邻边与斜边的比值。

Math.sin(x) : X 必需。一个以弧度表示的角。将角度乘以 0.017453293 (2PI/360)即可转换为弧度。

三、需求分析:

3.1 让这些黄色的DIV ,在同一个圆的圆周上排列

3.2 排列的方式是平均分布

四、原理分析:

要让DIV的排列,形成一个圆形,实质就是设置每个DIV的left值 和 TOP值 之间的关系,让它们之间值的关系,按照圆形的规律去设值;

4.1 圆形的规律是什么?

  是PI(圆周率); 任何值乘以这个PI再乘2,就可以得到一个圆形。这个“任何值”就是得到的圆形的半径;值越大,当然这个圆形也就越大。

4.2 怎么找到每个DIV的Left 和 TOP值之关系?

  上图中的每个黄色DIV左上角的红色点的坐标,就是left 和 TOP值 ,要让这个红色的点,正好分布在这个圆周上面,那么Left 和 top 必然要和这个PI关联起来。有PI才有圆。

五、实例分析

我要得到上图中,红点的坐标值,即DIV的left 和 TOP值,

LEFT = NG + o的横坐标值(left)

TOP = ON + or的纵坐标值(TOP)

所以先要求出每个一以圆心o为顶点,以圆形半径为斜边,的直角三角形的两个直角边的值。(上图中蓝色直角三角形的ON线段和NG线段的长度值)

  以半边圆形来看,当圆心角变大,半径不变的情况下,这个底边的值,是会变大的;

  正弦公式:sin(X) = 对边/斜边 X变大,斜边不变(半径),那么对边(上图中的NG线段)是会变大的;

  余统公式 cos(X) = 邻边/斜边 X变大,斜边不变(半径),那么邻边(上图中ON线段) 是会变小的;

  270度的正统值,是负1;

  180的余弦值是,是负1;

5.1 先设定一个圆

  半径:200px;

5.2 平均这个圆的圆周

  假设我们有8个DIV 要平均分布在这个半径为200PX的圆周上面。那么这里我们通过角度去平均(弧线的划分也好,平均也好,冒似都应该通过角度去划分);

  平均:圆形的圆心角的总角度为360度,平均成8份,就是360/8; 这样平分后的每一个圆心角,所对的弧长,弧度,就都是相等的。

5.3 求出NG的长度值,也就是DIV的left值,即红点的横坐标值;

  求这个值,要用到正弦函数;

  公式 Math.sin(X) = 对边/斜边;

  我们需要知道X,需要知到斜边;就可以求出“对边”值,即NG的长度值;

  5.3.1 这里的X是弧度,即角度数;上面定义中说过,弧度数是表示角度数的;

      根据公式: 角度数乘以 PI/180,就是弧度数; 即 X = (360/8)* PI/180

      这个求出的X就是把圆形平分之后,的弧度数;

  5.3.2 斜边,就是这个圆形的半径,即 200;

  5.3.3 “对边”值,即NG的长度值;

      根据上面的公式变形:对边(NG ) = Math.sin(X)*斜边

      即 :对边(NG )= Math.sin(X)* 200 = Math.sin( (360/8)* PI/180 )* 200;

  好了,现在把对边(NG )的值求出来了;也就是红点的横坐标值,即DVI的LEFT值;

5.4 求出每一个圆心角对应的直角边,即对边的长度值

  因为每一个圆心角,都是均分的,所以乘以一个倍数,就得到不周圆心角对应的弧度值,即角度值

  这里用DIV的索引为倍数,值乘以X,就得到每个均分后,每个圆心角的弧度值;

  对边 = Math.sin(X*索引)* 200;

  用这个求出的【对边】值 做为DIV的left值;

5.5 DIV的TOP值,即ON线段的长度值

  以上面四点的原理一样,只不过把正弦值,改为余弦值

  邻边(ON) = Math.COS(X*索引)* 200;

  把这个值设为 DIV的TOP值;

根据以上分析:代码如下,就可以按一个圆形,来排列DIV

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        //半径
        var radius = 200;
        //每一个BOX对应的角度;
        var avd = 360/$(".box").length;
        //每一个BOX对应的弧度;
        var ahd = avd*Math.PI/180;
        

        $(".box").each(function(index, element){
            $(this).css({"left":Math.sin((ahd*index))*radius,"top":Math.cos((ahd*index))*radius});
        });

5.6 设置这个圆形的位置

  圆形的位置,是根据这个圆形的圆心坐标来定的,所以我们就是要设置,圆心的坐标值,left top

  圆心的坐标坐变化了,那么对应DIV的left top也应该改变;

  比如圆心的left :100PX ; TOP:100px;

  那么每个DIV的LEFT和TOP也应该加上这个值:

代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    $(function(){
        //中心点横坐标
        var dotLeft = ($(".container").width()-$(".dot").width())/2;
        //中心点纵坐标
        var dotTop = ($(".container").height()-$(".dot").height())/2;
        //起始角度
        var stard = 0;
        //半径
        var radius = 200;
        //每一个BOX对应的角度;
        var avd = 360/$(".box").length;
        //每一个BOX对应的弧度;
        var ahd = avd*Math.PI/180;
        
        
        
        //设置圆的中心点的位置
        $(".dot").css({"left":dotLeft,"top":dotTop});
        $(".box").each(function(index, element){
            $(this).css({"left":Math.sin((ahd*index))*radius+dotLeft,"top":Math.cos((ahd*index))*radius+dotTop});
        });
    })

六 总结:

  6.1 在涉及到曲线或弧线的时候,应该用角度或弧度去分析,找关联;

  6.2 找关系或比例,让值和值之间是一个关系式,会用到乘以或除以一个倍数;( 例如以前写过的放大镜,就是用比例关系);

七 先前的理解有误,现在更新了分析的图片和分析;感谢 “ ”!的提示~

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166896.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript时间轮盘:js元素圆形布局制作时间轮盘动画
前段时间看抖音,有人用时间轮盘作为动态的桌面壁纸,感觉很好玩,于是突发奇想,可以用JS来实现这个功能。
Javanx
2019/09/04
3.6K0
JavaScript时间轮盘:js元素圆形布局制作时间轮盘动画
使用 SVG 和 JS 创建一个由星形变心形的动画
序言:首先,这是一篇学习 SVG 及 JS 动画不可多得的优秀文章。我非常喜欢 Ana Tudor 写的教程。在她的教程中有大量使用 SVG 制作的图解以及实时交互 DEMO,可以说教程的所有细枝末节都可以成为学习 SVG 以及 JS 画图的资料。另一方面,这篇教程也非常枯燥,因为教程的主要篇幅是关于几何图形的数学计算,不过上过中学的人都能理解。全篇翻译完,我觉得我几乎重新温习了一遍中学的几何知识,顺便学了点英语词汇。最后还要感叹一下,想要灵活运用 SVG 画图,深厚的数学功底是不可或缺的,同时还要有敏锐
叙帝利
2018/03/28
4.9K0
使用 SVG 和 JS 创建一个由星形变心形的动画
弧度和角度的转换_角度与弧度的换算表格
这两天在看同事写的四叉树代码,当中用到了孤度和角度之间的转换,所以转载此文章进行了学习
全栈程序员站长
2022/09/20
1.1K0
HTML5 Canvas开发详解(5) -- 动画
在Canvas中,mousedown、mouseup和mousemove这三种事件常用于实现拖拽功能。
爱学习的程序媛
2022/04/07
2K0
HTML5 Canvas开发详解(5) -- 动画
[学习笔记]三维数学(2)-三角函数
两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当弧长等于圆周长的360分之一时,夹角为一度。弧长等于圆的半径时,夹角为1弧度。 角度与弧度的换算 PI = 180度 1弧度=180度/PI 1角度=PI/180度 角度=>弧度: 弧度=角度数PI/180 API: 弧度=角度数Mathf.Deg2Rad 弧度=>角度: 角度=弧度数180/PI API: 角度=弧度数Mathf.Rad2Deg 在日常生活中角度制应用比较广泛。 在三角函数中弧度制可以简化计算。
六月丶
2022/12/26
1.2K0
[学习笔记]三维数学(2)-三角函数
你知道吗?圆弧有3种表达方式
所以我们在原来圆形的圆心、半径参数的基础上,加上极坐标弧度表示的起点和终点,就能表达一段圆弧。
前端西瓜哥
2024/06/03
4460
你知道吗?圆弧有3种表达方式
用初中数学知识撸一个canvas环形进度条
周一好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress。近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点。设计稿截图如下:
Sneaker-前端公虾米
2021/06/21
6090
用初中数学知识撸一个canvas环形进度条
js实现贝塞尔曲线,div也能如此丝滑?
今天遇到朋友发来的一个ui图,询问我如何实现下图这样的效果【vue项目】,(听说是类似LED灯的展示效果),于是便有了今天的小demo,要实现一个类似下图的动效,上面的灯会一直重复滚动,但是这个并不是什么难点,主要在于如何实现这种平滑的曲线,日常我们的开发的div在我们的脑海中通常就是一个网格状,涉及到平滑曲线的往往是图表,于是我们需要找一个方案来完成这种布局(非真实ui图,是完成之后的效果)
Snine
2023/01/07
1.7K0
js实现贝塞尔曲线,div也能如此丝滑?
用初中数学知识撸一个canvas环形进度条
周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress。近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点。设计稿截图如下:
程序员白彬
2020/07/10
1K0
用初中数学知识撸一个canvas环形进度条
科学计算机度转弧度,角度弧度换算器在线(70°角度转换弧度)
1°= 0.01745 rad 1rad =57.30° 计算过程:1° = π / 180 ≈ 0.01745 rad1rad = 180 / π = 57.30° 扩展资料:数学上是用弧度而非角度,因为360的容易整除对数学不重要,而数.
全栈程序员站长
2022/09/07
13.7K0
Canvas系列(10):动画初级
所谓动画其实就是快读绘制图片,由于人的眼睛更不上屏幕绘制的速率,所以看到的就好像连着的一样,也就形成了动画,动画片就是这个原理,canvas中的动画也是这个原理。提到动画就不得不说一个函数了,那就是requestAnimationFrame。这是一个定时执行的函数,类似于setTimeout,只是间隔时间不再有我们自己手动去设定,而是由计算机自己去计算,这样比我们直接设定的误差更小(通常我们是定1000/60,约等于16.7毫秒,因为CPU的频率一般是60Hz,也就是1秒最多可以刷新60次界面)。但是往往浏览器对requestAnimationFrame的支持不够友好,那这就需要polyfill,通常一种简单的polyfill可以这么写:
kai666666
2020/10/19
8340
Canvas系列(10):动画初级
AS3 公式大全
基础三角函数的计算: 角的正弦值 = 对边 / 斜边 角的余弦值 = 邻边 / 斜边 角的正切值 = 对边 / 邻边
py3study
2020/01/09
6790
WPF 实现带明细的环形图表
[1]源码: https://files.cnblogs.com/files/tsliwei/ArcChart.zip
独立观察员
2022/12/06
5130
WPF 实现带明细的环形图表
Unity Mathf【Deg & Rad】- 关于数学运算中的度与弧度
Mathf中的三角函数是我们常用的数学运算函数,在使用过程中需要注意参数的单位,以Sin正弦函数为例,我们都知道30度角的正弦函数结果为0.5,那么当我们调用Mathf.Sin函数时,假如我们传入30,则可以发现其结果并不是0.5:
CoderZ
2022/08/29
9450
Unity Mathf【Deg & Rad】- 关于数学运算中的度与弧度
深度剖析一个弧形进度条的实现
Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中两点之间的一条椭圆弧。两者结合可以很轻松的实现圆弧效果。
极炫小钢炮
2024/12/13
1970
深度剖析一个弧形进度条的实现
前端-三角函数在动画中的应用
我是个很懒的人,开发过程中经常有意无意地刻意避开数学相关的知识,你也知道解数学题非常枯燥无趣。平时写动画也尽量使用 css3 来实现,timer-function 随意选用,最多也就调一下 cubic-bezier,找到看着舒服的就行。但是怎样让动画更顺滑,写出更贴近自然的动画,说实话以前我没怎么考虑过。
grain先森
2019/03/29
1.3K0
前端-三角函数在动画中的应用
根据经纬度、方向、距离求终点位置
假设方位角是α, 那从点1到点2的平移距离分别如下所示d*sinα, d*cosα。 这里正北为0度。基中点1经纬度(long1, lat1)和距离d是已知的。 求点2的经纬度(long2,lat2)
sunsky
2023/09/13
7920
根据经纬度、方向、距离求终点位置
从弧到多线段:深入解析 Java 中的弧度转多线段算法!
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/09/17
3020
从弧到多线段:深入解析 Java 中的弧度转多线段算法!
Canvas入门到高级详解(下)
配套视频请戳:https://www.bilibili.com/video/av26151775/
老马
2019/05/25
3.5K0
MySQL空间函数度量换算——距离计算,度数换算成公里海里
1、计算公式 弧长=圆周率×半径×圆心角角度/180°        L=πr*n/180 圆心角角度=180°×弧长/圆周率/半径        n=180*L/πr 1 海里=1.852 千米(公里) 2、SQL代码 -- 圆周公式 C = 2*πr 除以1000换算成公里 SET @C=2*PI()*6371000 /1000; -- 40030.1735920411 赤道约4万公里 -- 推导弧长 L = 2*πr*n/360 = n/360*C = πr*n/180 SELE
静谧星空TEL
2021/04/27
9350
相关推荐
JavaScript时间轮盘:js元素圆形布局制作时间轮盘动画
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验