您好,登錄后才能下訂單哦!
JavaScript中怎么利用transform實現扇子效果,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
實現:
<!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(){ // 扇子類 class Fan { // Fan類的構造器,接收傳入的參數 // params selector 容器的選擇器 // params options 一些配置參數 // options size 尺寸 // ... // void return constructor ( selector, options ) { // 扇子容器 this.selector = selector this.wrapper = document.querySelector(selector) // 默認配置項 let _options = { size: 'normal' // large } // 配置項 this.options = options || _options // 扇葉的尺寸 this.size = { width: 50, height: 150 } // 進行初始化操作 this.init() } // 初始化函數 init () { // 創建扇葉 this.createFanBlade() } // 創建扇葉 createFanBlade () { // 扇葉的數量 當new時size不為normal時,輸出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()//背景顏色隨機 _fragmentStr += `<p ></p>` } // 放入扇葉 this.wrapper.innerHTML = _fragmentStr ; this.createTransition(_bladeNumbers); } // 制作動效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 角度轉化 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; } // 轉換樣式對象為字符串 turnStyleToString (styleObject) { let _result = '' for (const key in styleObject) { _result += key + ':' + styleObject[key] + ';' } return _result; } // 隨機創建顏色 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>
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。