環(huán)繞按鈕動畫———原生javascript手作

前端入坑紀 58

今天來分享昨天和小伙伴聊到的一個效果

好藐不,詳解如下!

OK秦效,first things first雏蛮! 點我查看實際效果

集齊7顆召喚神龍吧,騷年
HTML 結構
    <div class="mainWrp">
        <div class="navs">
            <div class="roller" id="rob">
                <a href="javascript:;"><em>B1</em></a>
                <a href="javascript:;"><em>B2</em></a>
                <a href="javascript:;"><em>B3</em></a>
                <a href="javascript:;"><em>B4</em></a>
                <a href="javascript:;"><em>B5</em></a>
                <a href="javascript:;"><em>B6</em></a>
                <a href="javascript:;"><em>B7</em></a>
                <button class="rob" id="rollout">ROT</button>
            </div>
        </div>
    </div>

所有的按鈕都是包裹在div.roller 里阱州,div.roller 的底色與底部條顏色相同挑秉,以制造凸的效果

CSS 結構
        html,
        body {
            margin: 0;
            padding: 0;
            height: 100%;
        }

        button {
            background: none;
            border: none;
            outline: none
        }

        a {
            color: #333;
            text-decoration: none
        }

        .navs {
            position: fixed;
            bottom: 0;
            width: 100%;
            z-index: 99;
            height: 60px;
            background-color: aliceblue;
        }

        .roller {
            position: absolute;
            height: 50px;
            width: 50px;
            border-radius: 50%;
            background-color: aliceblue;
            top: -20px;
            left: 50%;
            transform: translateX(-50%)
        }

        .roller a {
            display: block;
            opacity: 0;
            position: absolute;
            top: 3px;
            left: 3px;
            text-align: center;
            height: 44px;
            width: 44px;
            border-radius: 50%;
            background-color: tomato;
            color: #fff;
            font-size: 15px;
            line-height: 44px;
            transition: all 500ms ease;
            transform-origin: center center;
        }

        .roller a em {
            display: block;
            font-style: normal;
            text-shadow: 0 0 #fff;
        }

        .rob {
            display: block;
            height: 46px;
            width: 46px;
            line-height: 46px;
            border-radius: 50%;
            margin: 2px;
            position: absolute;
            background-color: blanchedalmond
        }

        button.rob:active {
            background-color: azure
        }

按鈕基本都是采用絕對定位布局position:absolute,整條底部的div.navs則是position:fixed布局

JavaScript 結構
        var linkas = document.querySelector('#rob').querySelectorAll('a')
        var rollout = document.querySelector('#rollout')
        var arc = 180 / linkas.length
        var bolt = 0

        function hide() {
            linkas.forEach((item, index) => {
                item.querySelector('em').style.transform = 'rotateZ(' + arc * (index + 0.5) + 'deg)'
                item.style.transform = 'rotateZ(-' + arc * (index + 0.5) + 'deg) translateX(0)'
                item.style.opacity = '0'
            })
        }
        function show(){
            linkas.forEach((item, index) => {
                item.style.transform = 'rotateZ(-' + arc * (index + 0.5) + 'deg) translateX(100px)'
                item.style.opacity = '1'
            })
        }

        hide()

        rollout.addEventListener('click', function () {
            if(bolt){
                hide()
                bolt=0
            }else{
                show()
                bolt=1
            }
        })

這里需要注意的是按鈕旋轉時的角度計算苔货,180平分成n個扇形犀概,然后把按鈕放在每個分好的扇形中間,所以是從arc * (index + 0.5) 開始計算夜惭。并且旋轉了每個a后姻灶,記得把里面的em也要對應旋轉回來,不然字也跟著轉歪了

好了诈茧,到此产喉,本文告一段落!感謝您的閱讀!祝你身體健康曾沈,闔家幸福尘颓!

打開支付寶首頁搜 625097528 領紅包,領到大紅包的小伙伴趕緊使用哦晦譬!
支持你我,掃一掃紅包
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互广,一起剝皮案震驚了整個濱河市敛腌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惫皱,老刑警劉巖像樊,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旅敷,居然都是意外死亡生棍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門媳谁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涂滴,“玉大人,你說我怎么就攤上這事晴音∪嶙荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵锤躁,是天一觀的道長搁料。 經(jīng)常有香客問我,道長系羞,這世上最難降的妖魔是什么郭计? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮椒振,結果婚禮上昭伸,老公的妹妹穿的比我還像新娘。我一直安慰自己杠人,他們只是感情好勋乾,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗡善,像睡著了一般辑莫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩引,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天各吨,我揣著相機與錄音,去河邊找鬼。 笑死揭蜒,一個胖子當著我的面吹牛横浑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屉更,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼徙融,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瑰谜?” 一聲冷哼從身側響起欺冀,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萨脑,沒想到半個月后隐轩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡渤早,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年职车,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹊杖。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡悴灵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骂蓖,到底是詐尸還是另有隱情称勋,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布涯竟,位于F島的核電站赡鲜,受9級特大地震影響,放射性物質發(fā)生泄漏庐船。R本人自食惡果不足惜银酬,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筐钟。 院中可真熱鬧揩瞪,春花似錦、人聲如沸篓冲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壹将。三九已至嗤攻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诽俯,已是汗流浹背妇菱。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闯团。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓辛臊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親房交。 傳聞我的和親對象是個殘疾皇子彻舰,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355