JS实现transform实现扇子效果


Posted in Javascript onJanuary 17, 2020

本文实例为大家分享了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
硬盘浏览程序,保存成网页格式便可使用
Dec 03 Javascript
javascript编程起步(第二课)
Jan 10 Javascript
老鱼 浅谈javascript面向对象编程
Mar 04 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
Aug 23 Javascript
jquery next nextAll nextUntil siblings的区别介绍
Oct 05 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
vue实现移动端省市区选择
Sep 27 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 #jQuery
浅谈VUE中演示v-for为什么要加key
Jan 16 #Javascript
Vue引入Stylus知识点总结
Jan 16 #Javascript
js实现提交前对列表数据的增删改查
Jan 16 #Javascript
react实现移动端下拉菜单的示例代码
Jan 16 #Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 #Javascript
JS实现简单的表格增删
Jan 16 #Javascript
You might like
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
大学生饮食连锁店创业计划书
2014/01/17 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
总经理任命书范本
2014/06/05 职场文书
主要负责人任命书
2014/06/06 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
师德师风事迹材料
2014/12/20 职场文书
中秋节寄语2015
2015/03/24 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis