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 相关文章推荐
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
对比分析json及XML
Nov 28 Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
vue2使用keep-alive缓存多层列表页的方法
Sep 21 Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 jQuery
node事件循环和process模块实例分析
Feb 14 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
URL Rewrite的设置方法
2007/01/02 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
语义化 H1 标签
2008/01/14 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
Vue实现星级评价效果实例详解
2019/12/30 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
举例讲解Python装饰器
2020/12/24 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
薪酬专员岗位职责
2014/02/18 职场文书
《金子》教学反思
2014/04/13 职场文书
法学求职信
2014/06/22 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
我的1919观后感
2015/06/03 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python