溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript中怎么利用transform實(shí)現(xiàn)扇子效果

發(fā)布時(shí)間:2021-08-10 14:48:43 來(lái)源:億速云 閱讀:108 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

JavaScript中怎么利用transform實(shí)現(xiàn)扇子效果,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

實(shí)現(xiàn):

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title></head><style>.fan { margin: 0 auto; position: relative; top: 100px; width: 50px;}.fan-other { margin: 0 auto; position: relative; top: 300px; width: 50px;}</style><body>  <p class="fan"></p>  <p class="fan-other"></p>  <script>  (function(){    // 扇子類(lèi)    class Fan {      // Fan類(lèi)的構(gòu)造器,接收傳入的參數(shù)      // params selector 容器的選擇器      // params options 一些配置參數(shù)      // options size 尺寸      // ...      // void return      constructor ( selector, options ) {        // 扇子容器        this.selector = selector        this.wrapper = document.querySelector(selector)        // 默認(rèn)配置項(xiàng)        let _options = {          size: 'normal' // large        }        // 配置項(xiàng)        this.options = options || _options        // 扇葉的尺寸        this.size = {          width: 50, height: 150        }        // 進(jìn)行初始化操作        this.init()      }      // 初始化函數(shù)      init () {        // 創(chuàng)建扇葉        this.createFanBlade()      }      // 創(chuàng)建扇葉      createFanBlade () {        // 扇葉的數(shù)量 當(dāng)new時(shí)size不為normal時(shí),輸出11片扇葉的扇子        let _bladeNumbers = this.options.size === 'normal' ? 9 : 11;        let _fragmentStr = '';        let { width, height } = this.size;        // 扇葉樣式        let _bladeStyle = {          width: width + 'px',          height: height+ 'px',          position: 'absolute',          top: 0, left: 0        }        for (let i = 0; i < _bladeNumbers; i++) {          _bladeStyle.background = this.createRandomColor()//背景顏色隨機(jī)           _fragmentStr += `<p ></p>`        }        // 放入扇葉        this.wrapper.innerHTML = _fragmentStr ;        this.createTransition(_bladeNumbers);      }      // 制作動(dòng)效Style并插入到head中      createTransition (_bladeNumbers) {        let _result = '<style>';        _result += `          ${this.selector} p { transition: all 0.5s; transform-origin: center bottom; }        `;        // 0 1 2 3 4 5 6 7 8 角度轉(zhuǎn)化 0-8 中間是0° -70°~70°        for (let i = 0; i < _bladeNumbers; i++) {          let _num = (_bladeNumbers - 1) / 2          let _angle = (i - _num) * 70 / _num          _result += `            ${this.selector}:hover p:nth-child(${i+1}){            transform: rotate(${_angle}deg); }          `        }        _result += '</style>'        document.querySelector('head').innerHTML += _result;      }      // 轉(zhuǎn)換樣式對(duì)象為字符串      turnStyleToString (styleObject) {        let _result = ''        for (const key in styleObject) {        _result += key + ':' + styleObject[key] + ';'        }        return _result;      }      // 隨機(jī)創(chuàng)建顏色      createRandomColor () {        return "#"+(function(color){          return new Array(7-color.length).join("0")+color;        })((Math.random() * 0x1000000 | 0).toString(16));      }    }    new Fan('.fan')    new Fan('.fan-other', {      size: 'large'    })  })();  </script></body></html>

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI