JS实现transform实现扇子效果
程序员文章站
2022-03-10 11:31:01
本文实例为大家分享了js实现transform实现扇子效果的具体代码,供大家参考,具体内容如下
描述:
js面向对象——利用transform实现扇子效果
效果:
实现:...
本文实例为大家分享了js实现transform实现扇子效果的具体代码,供大家参考,具体内容如下
描述:
js面向对象——利用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> <div class="fan"></div> <div class="fan-other"></div> <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 += `<div style="${this.turnstyletostring(_bladestyle)}"></div>` } // 放入扇叶 this.wrapper.innerhtml = _fragmentstr ; this.createtransition(_bladenumbers); } // 制作动效style并插入到head中 createtransition (_bladenumbers) { let _result = '<style>'; _result += ` ${this.selector} div { 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 div: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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: jQuery实现王者荣耀手风琴效果