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 相关文章推荐
JS小框架 fly javascript framework
Nov 26 Javascript
js日历功能对象
Jan 12 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
Jan 16 Javascript
Javascript小技巧之生成html元素
May 15 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
vue实现表格数据的增删改查
Jul 10 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
Apr 15 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
jQuery实现图片切换效果
Oct 19 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
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
简单的js计算器实现
2016/10/26 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
5种Python单例模式的实现方式
2016/01/14 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
解读python如何实现决策树算法
2018/10/11 Python
python 重命名轴索引的方法
2018/11/10 Python
python构建基础的爬虫教学
2018/12/23 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
高中数学教师求职信
2013/10/30 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
一年级评语大全
2014/04/23 职场文书
机关党员公开承诺书
2014/08/30 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
贷款担保书
2015/01/20 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis