svg實(shí)現(xiàn)轉(zhuǎn)盤挤悉,輪盤

  • 最近產(chǎn)品上有個需求泣刹,需要用到類似轉(zhuǎn)盤控制方向的需求术健,如圖:


    image.png
  • 開始的時候用的是div中position:relative 加子組件直接用切圖汹碱,position:absolute絕對定位,慢慢移動組合成圓盤荞估,切圖如果不精確咳促,很難組合成圓,效果不是很好勘伺,如圖:


    image.png

實(shí)現(xiàn)輪盤轉(zhuǎn)盤就是畫圓和扇形跪腹,實(shí)現(xiàn)圓和扇形有兩種方式

  • css實(shí)現(xiàn)
  • svg實(shí)現(xiàn)

下面我所說的就是svg的形式

首先要知道svg的 A 指令:

參數(shù) 描述
rx 橢圓長軸半徑
ry 橢圓短軸半徑
xa 橢圓與x軸的夾角
lf 所取的弧大小,1取大弧飞醉,0取小弧
sf 繪制弧線的方向冲茸,1順時針繪制屯阀,0逆時針繪制
ex 結(jié)束點(diǎn)的x坐標(biāo)
ey 結(jié)束點(diǎn)的y坐標(biāo)
  • 然后是計算坐標(biāo)。我這個圓是等分8個扇形轴术。所以每個扇形是360/8=45度
  • 我們需要計算這幾個數(shù):cos45和sin45的數(shù)值
  • 拿第一個扇形路徑來舉例
<circle
        cx="50"
        cy="50"
        r="48"
        stroke="#02effb"
        fill="transparent"
        stroke-width="2"
      ></circle>
 <path
        d="M 50 50  L 50 3 A 45 45, 0,0,1,85.89 20.16 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
      ></path>
  • circle中难衰, cx="50"cy="50" 原點(diǎn)50 50 以半徑 r="48" 畫圓
  • M 50 50:從 x:50,y:50坐標(biāo)開始
  • L 50 3 :畫一條直線 到終點(diǎn)坐標(biāo)x 50 y 3
  • A 45 45, 0,0,1,85.89 20.16:橢圓長短軸 50 50 x軸夾腳0逗栽,0小弧(凸扇形)盖袭,1順時針,結(jié)束點(diǎn)坐標(biāo)x x 85.89 y 20.16
  • Z 直線回到原點(diǎn)封閉
  • 重點(diǎn)就是 結(jié)束點(diǎn)坐標(biāo)的計算彼宠,圓的半徑是48鳄虱,原點(diǎn)坐標(biāo)是50 50,a=48cos45凭峡,b=48sin45, x=50-a拙已,y=50-b,算出來大概的數(shù)摧冀。然后大概調(diào)整下
<div class="ball">
    <svg
      
      width="15"
      height="15"
      id="svg1"
      style="
        position: absolute;
        top: 10%;
        left: 41%;

        width: 16%;
        transform: rotate(150deg);
      "
    >
<!-- 白色箭頭-->
      <path
        d="M 0 15  L 0 0  A 15 15, 0,0,0,13 7.5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="15"
      height="15"
      id="svg3"
      style="
        position: absolute;
        top: 37%;
        left: 76%;
        width: 16%;
        transform: rotate(240deg);
      "
    >
      <path
        d="M 0 15  L 0 0  A 15 15, 0,0,0,13 7.5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="15"
      height="15"
      id="svg5"
      style="
        position: absolute;
        top: 73%;
        left: 44%;
        width: 16%;
        transform: rotate(330deg);
      "
    >
      <path
        d="M 0 15  L 0 0  A 15 15, 0,0,0,13 7.5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="15"
      height="15"
      id="svg7"
      style="
        position: absolute;
        top: 46%;
        left: 8%;
        width: 16%;
        transform: rotate(60deg);
      "
    >
      <path
        d="M 0 15  L 0 0  A 15 15, 0,0,0,13 7.5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="10"
      height="10"
      id="svg2"
      style="
        position: absolute;
        top: 19%;
        left: 65%;
        width: 16%;
        transform: rotate(195deg);
      "
    >
      <path
        d="M 0 10  L 0 0  A 15 15, 0,0,0,8.66 5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="10"
      height="10"
      id="svg4"
      style="
        position: absolute;
        top: 63%;
        left: 69%;
        width: 16%;
        transform: rotate(285deg);
      "
    >
      <path
        d="M 0 10  L 0 0  A 15 15, 0,0,0,8.66 5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="10"
      height="10"
      id="svg6"
      style="
        position: absolute;
        top: 70%;
        left: 22%;
        width: 16%;
        transform: rotate(15deg);
      "
    >
      <path
        d="M 0 10  L 0 0  A 15 15, 0,0,0,8.66 5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg
      width="10"
      height="10"
      id="svg8"
      style="
        position: absolute;
        top: 24%;
        left: 14%;
        width: 16%;
        transform: rotate(105deg);
      "
    >
      <path
        d="M 0 10  L 0 0  A 15 15, 0,0,0,8.66 5 Z"
        stroke-width="1"
        class="ctl-ac"
      ></path></svg
    ><svg width="100" height="100" transform="rotate(-22)">

<!-- 圓和扇形-->
      <circle
        cx="50"
        cy="50"
        r="48"
        stroke="#02effb"
        fill="transparent"
        stroke-width="2"
      ></circle>
      <path
        d="M 50 50  L 50 3 A 45 45, 0,0,1,85.89 20.16 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
      ></path>
      <path
        d="M 50 50  L  85.89 20.16 A 45 45, 0,0,1,96.5 50 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  96.5 50 A 45 45, 0,0,1,85.89 79.84 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  85.89 79.84 A 45 45, 0,0,1,50 97 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  50 97 A 45 45, 0,0,1,14.11 79.84 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  14.11 79.84 A 45 45, 0,0,1,3 50 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  3 50 A 45 45, 0,0,1,14.11 20.16 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
      <path
        d="M 50 50  L  14.11 20.16 A 45 45, 0,0,1,50 3 Z"
        stroke="#085b8b"
        stroke-width="1"
        class="ctl-svg"
        
      ></path>
    </svg>
  </div>
<style>
.ball {
position: relative;
width: 100px;
height: 100px;
border-radius: 50%;

margin-top: 7%;
margin-left: 5%;
}
.ctl-svg {
fill: #0a6d98;
fill-opacity: 0.3;
}
.ctl-svg:hover {
fill: #0a6d98;
fill-opacity: 0.8;
}
.ctl-ac {
fill: #red;
}
</style>

最終效果:


Untitled.gif

另:還有一種方式應(yīng)該也可以倍踪,畫出一個扇形,以扇形原點(diǎn)旋轉(zhuǎn)對應(yīng)角度索昂,也可以實(shí)現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惭适,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子楼镐,更是在濱河造成了極大的恐慌癞志,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件框产,死亡現(xiàn)場離奇詭異凄杯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秉宿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門戒突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人描睦,你說我怎么就攤上這事膊存。” “怎么了忱叭?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵隔崎,是天一觀的道長韵丑。 經(jīng)常有香客問我,道長撵彻,這世上最難降的妖魔是什么钓株? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮轴合,結(jié)果婚禮上创坞,老公的妹妹穿的比我還像新娘受葛。我一直安慰自己,他們只是感情好奔坟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布搭盾。 她就那樣靜靜地躺著咳秉,像睡著了一般鸯隅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝌以,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音跟畅,去河邊找鬼咽筋。 笑死,一個胖子當(dāng)著我的面吹牛徊件,可吹牛的內(nèi)容都是我干的奸攻。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼虱痕,長吁一口氣:“原來是場噩夢啊……” “哼睹耐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起部翘,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤硝训,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后新思,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窖梁,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年夹囚,在試婚紗的時候發(fā)現(xiàn)自己被綠了窄绒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔兴,死狀恐怖彰导,靈堂內(nèi)的尸體忽然破棺而出蛔翅,到底是詐尸還是另有隱情,我是刑警寧澤位谋,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布山析,位于F島的核電站,受9級特大地震影響掏父,放射性物質(zhì)發(fā)生泄漏笋轨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一赊淑、第九天 我趴在偏房一處隱蔽的房頂上張望爵政。 院中可真熱鬧,春花似錦陶缺、人聲如沸钾挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掺出。三九已至,卻和暖如春苫费,著一層夾襖步出監(jiān)牢的瞬間汤锨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工百框, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闲礼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓铐维,卻偏偏與公主長得像位仁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子方椎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容