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 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
JavaScript DOM 添加事件
Feb 14 Javascript
jquery实现excel导出的方法
Apr 04 Javascript
js截取固定长度的中英文字符的简单实例
Nov 22 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
Js实现简单的小球运动特效
Feb 18 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
Apr 15 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 Javascript
深入理解jQuery layui分页控件的使用
Aug 17 Javascript
ReactJs快速入门教程(精华版)
Nov 28 Javascript
Vue3 中的数据侦测的实现
Oct 09 Javascript
jquery css实现流程进度条
Mar 26 jQuery
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
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
js常见表单应用技巧
2008/01/09 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
vue购物车插件编写代码
2017/11/27 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
大学生毕业鉴定
2014/01/31 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
投资合作意向书范本
2015/05/08 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS