亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

基于javascript實現按圓形排列DIV元素(一)

2019-11-19 18:43:08
字體:
來源:轉載
供稿:網友

效果圖:

一、分析圖:

綠色邊框內:外層的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

//半徑 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也應該加上這個值:

代碼如下

$(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 找關系或比例,讓值和值之間是一個關系式,會用到乘以或除以一個倍數;( 例如以前寫過的放大鏡,就是用比例關系);

七 先前的理解有誤,現在更新了分析的圖片和分析;感謝 “ 弦”!的提示~

以上就是本文的全部內容,希望對大家有所幫助,有興趣的朋友可以看下《基于javascript實現按圓形排列DIV元素(二)》《基于javascript實現按圓形排列DIV元素(三)》,謝謝對武林網的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧洲在线观看| 久久久之久亚州精品露出| 97视频在线免费观看| 另类少妇人与禽zozz0性伦| 国产成人精品久久二区二区| 韩国视频理论视频久久| 精品久久久久久国产| 亚洲精品国产精品久久清纯直播| 欧美性xxxx极品hd满灌| 欧美成人激情视频| 精品亚洲一区二区三区四区五区| 久久久999精品| 一区二区三区久久精品| 久久久久这里只有精品| 久久久久久综合网天天| 日韩av三级在线观看| 91最新在线免费观看| 日韩欧美中文第一页| 国产成人精品视频| 成人黄色av播放免费| 亚洲人成网站免费播放| 日本在线精品视频| 97碰碰碰免费色视频| 久久中文精品视频| 午夜精品国产精品大乳美女| 亚洲精品免费在线视频| 欧美激情综合色综合啪啪五月| 国产精品视频网址| 色视频www在线播放国产成人| 亚洲国产成人精品电影| 一区二区欧美在线| 国产精品专区第二| 国产精品99导航| 国产网站欧美日韩免费精品在线观看| 欧美日韩国产激情| 欧美裸体xxxx极品少妇| 日韩经典一区二区三区| 欧美亚洲一级片| 日韩欧美精品网址| 日本伊人精品一区二区三区介绍| 久久国产天堂福利天堂| 国产成人精品一区二区三区| 欧美激情乱人伦一区| 性欧美亚洲xxxx乳在线观看| 一本一本久久a久久精品综合小说| 日韩在线国产精品| 亚洲国产精品99| 欧美激情在线狂野欧美精品| 91av中文字幕| 国产综合久久久久久| 日韩高清av在线| 亚洲男人天天操| 亚洲 日韩 国产第一| 亚洲一级免费视频| www.美女亚洲精品| 国产精品男人爽免费视频1| 久久亚洲精品视频| 最近2019中文字幕一页二页| 91精品视频免费| 国产原创欧美精品| 精品国产一区二区三区久久久| 国产成人精品在线播放| 亚洲高清一二三区| 成人免费看吃奶视频网站| 在线观看亚洲视频| 久久免费视频网| 伊人激情综合网| 国产一区二中文字幕在线看| 日韩美女视频在线观看| 久久久国产精品亚洲一区| 国产91精品视频在线观看| 亚洲男人天堂古典| 国产精品视频一区二区高潮| 久久精品男人天堂| 中文字幕亚洲综合久久| 北条麻妃一区二区在线观看| 亚洲欧美日韩国产成人| 92版电视剧仙鹤神针在线观看| 欧美激情精品久久久久久大尺度| 日韩精品中文字幕有码专区| 国产精品色婷婷视频| 午夜精品久久久久久久99黑人| 国产精品va在线播放我和闺蜜| 国产亚洲视频在线观看| 欧美激情在线狂野欧美精品| 亚洲欧美另类在线观看| 色综合天天综合网国产成人网| 日韩欧美中文字幕在线观看| 91精品久久久久久| 91成人在线视频| 日韩一区二区在线视频| 北条麻妃一区二区三区中文字幕| 91黑丝在线观看| 中文字幕av一区二区| 伦理中文字幕亚洲| 国产精品永久免费视频| 亚洲欧洲自拍偷拍| 欧美国产日韩视频| 亚洲成色www8888| 国产精品视频区1| 国产亚洲精品高潮| 粉嫩av一区二区三区免费野| 国产一区二区av| 欧美主播福利视频| 亚洲国产又黄又爽女人高潮的| 欧美裸身视频免费观看| 久久资源免费视频| 欧美激情免费观看| 久久久精品国产亚洲| 日本成人精品在线| 欧美专区日韩视频| 亚洲免费伊人电影在线观看av| 欧美亚洲另类视频| 日本19禁啪啪免费观看www| zzijzzij亚洲日本成熟少妇| 日韩欧美成人网| 欧美一级电影在线| 欧美夫妻性生活xx| 97久久久免费福利网址| 欧美极品美女电影一区| 日韩av电影院| 亚洲欧美在线免费| 91精品综合视频| 久久久亚洲成人| 最近2019中文免费高清视频观看www99| 亚洲韩国欧洲国产日产av| 亚洲欧洲在线视频| 国产亚洲欧美视频| 亚洲人成网站999久久久综合| 精品久久久久久中文字幕大豆网| 欧美日韩国产综合视频在线观看中文| 国产欧美精品一区二区| 狠狠操狠狠色综合网| 成人淫片在线看| 亚洲国产精品电影| 国产在线观看91精品一区| 国产精品成人在线| 久久在线视频在线| 欧美一区亚洲一区| 亚洲大胆人体av| 欧美一区二区三区……| 国产精品视频一区二区三区四| 精品动漫一区二区| 亚洲欧美在线一区| 岛国av一区二区| 亚洲a成v人在线观看| 亚洲国产欧美一区| 都市激情亚洲色图| 日韩成人久久久| 国产91对白在线播放| 欧美成人剧情片在线观看| 精品小视频在线| 亚洲精品美女在线观看播放| 国产精品爱啪在线线免费观看| 日韩有码在线视频| 亚洲国产日韩精品在线| 俺去亚洲欧洲欧美日韩| 97人人爽人人喊人人模波多| 欧美成人久久久| 欧美亚州一区二区三区| 亚洲性猛交xxxxwww| 国产精品h片在线播放| 色噜噜狠狠狠综合曰曰曰88av| xvideos国产精品|