室外温度已达34度,本博客为您提供云风扇服务

烈日炎炎,快来降温吧!

实现效果

看!很凉快吧!

实现过程

  1. HTML结构

首先先从html开始,我们将顶部的文字和下面的风扇分成2个部分,再将风扇和切换按钮分离,对于风扇结构来说,我相信很多人会以为这是图片,但是其实这个是通过border-radius属性画出的扇页形状,再通过2根横竖的棍子拼接成了风扇的形状

<div class="fan"><div class="title">//文字...</div><div class="container"><div class="header">//风扇头...</div><div class="stick"></div>//棍子<div class="footer"></div>//底座<div class="switch">//按钮...</div></div>
</div>
  1. CSS样式

这个demo比较有一点点难度的地方在扇叶部分,主要思路是,将扇叶的一端定位到圆心上,再通过border-radius来调节扇叶形状,对于三张扇叶的处理,我们先将他们定位在一起,再通过旋转将他们分开,形成一个环绕圆心的效果

.leaf {position: absolute;top: 140px;left: 140px;width: 100px;height: 78px;border: 10px solid black;border-radius: 19% 50%;transform-origin: 0 0;
}/*给所有扇叶添加样式*/
.leaf-1 {transform: rotate(120deg);/*旋转开*/
}
.leaf-2 {transform: rotate(240deg);
}
  1. 旋转效果

实现旋转效果的方法有很多,js定时器,css3等都可以实现,这里采用css3的动画来实现。首先,先写一个旋转动画,能够使风扇转起来,再通过js来调控风扇的开关

@keyframes rotate {0% {transform: rotate(0deg);}100% {transform: rotate(1080deg);}
}
.leafs {animation: rotate 0s infinite linear;
}/*扇叶的外层盒子*/

就像这样我们确保了动画效果无误后,将动画时间设置为0s

  1. 控制转速

通过点击不同的按钮,实现转速的改变,也就是动画时间的改变,默认风扇是关闭的,当我们点击1到3档时,我们给leafs添加动画时间,也就是档数越大动画时间越短

switch (index) {case '0':rot(0)leafs.classList.add('out')break;case '1':leafs.classList.remove('out')rot(2)break;case '2':leafs.classList.remove('out')rot(1.3)break;case '3':leafs.classList.remove('out')rot(.7)break;
}
function rot(rate) {leafs.style.animationDuration = `${rate}s`
}

通过点击不同的按钮传入不同的rate实现控制转速的功能

  1. 关闭时缓慢停止

你可能会发现在上面的代码中,会有一个类名的出现out,这个就是我用来实现缓慢停止的核心了,在点击关闭时,重新给扇叶leafs添加一个结束动画

.out {animation: lastRotate 2.6s 1 ease-out !important;
}

这样在用户点击关闭按钮时,会先将原本的动画时间设置为0,再添加新的动画,这个动画是一个ease-out效果,速度会减慢从而实现了缓慢停止的功能

实现效果一般,转速过快时,速度还是会有突变的效果

实现代码

HTML代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>云风扇</title><link rel="stylesheet" href="fan.css"><script src="fan.js"></script>
</head><body><div class="fan"><div class="title"><h2>夏日清凉云风扇<br><p class="small">“你看,风扇转了,好凉快”</p></h2></div><div class="container"><div class="header"><div class="leafs"><div class="circle"></div><div class="leaf leaf-1"></div><div class="leaf leaf-2"></div><div class="leaf leaf-3"></div></div></div><div class="stick"></div><div class="footer"></div><div class="switch"><div class="selected" id="close">关</div><div id="first">1</div><div id="second">2</div><div id="third">3</div></div></div></div>
</body></html>

JS代码

window.addEventListener('load', function () {let leafs = document.querySelector('.leafs');let switchBox = document.querySelector('.switch');let len = switchBox.children.length;for (let i = 0; i < len; i++) {switchBox.children[i].setAttribute('data-index', i)}switchBox.addEventListener('click', function (e) {let target = e.target;for (let i = 0; i < len; i++) {switchBox.children[i].className = ''}target.classList.add('selected');let index = target.dataset.index;switch (index) {case '0':rot(0)leafs.classList.add('out')break;case '1':leafs.classList.remove('out')rot(2)break;case '2':leafs.classList.remove('out')rot(1.3)break;case '3':leafs.classList.remove('out')rot(.7)break;}})function rot(rate) {leafs.style.animationDuration = `${rate}s`}
})

css代码太长了,就不放上来了,如果需要可以留言


结语

我顶着大太阳

只想为你撑伞

你靠在我肩膀

深呼吸怕遗忘

炎炎夏日,头顶风扇,在宿舍敲代码真的很快乐!

室外温度已达34度,本博客提供自助风扇服务相关推荐

  1. K-Means聚类算法及其python实现(已附上代码至本博客)

    目录 一.算法公式讲解 二.算法流程 三.算法实现代码 四.代码结果分析 五.K-Means库函数 六.K-Means算法时间复杂度 一.算法公式讲解 对于 n代表了x有n维,x上标j表示第j维的特征 ...

  2. 本博客已废弃。目前迁移至 http://www.sunzhongwei.com 大象笔记

    本博客已停止更新. 目前迁移至自己在阿里云服务器上搭建的 http://www.sunzhongwei.com 大象笔记 欢迎大家访问新博客. 哈哈

  3. [公告]本博客已迁移到 tpu01yzx.me

    本博客已迁移到 https://tpu01yzx.me/p/category/archive/csdn

  4. 本博客已转至蚂蚁笔记

    如题,本博客已转至蚂蚁笔记 链接戳这里 主要是好看qaq

  5. 物联网产业规模已达万亿,目前的主要应用领域有哪些?

    物联网( Internet of Things,简称 IoT ),是新一代信息科技的重要组成部分,是继计算机.互联网之后世界信息发展的第三次浪潮.据统计,2017年中国物联网产业规模已达万亿,我国早已 ...

  6. esp32连接海萤物联网显示南京室外温度

    文章目录 esp32连接海萤物联网显示南京室外温度 介绍 硬件连接 温度检测节点 温度显示节点 温度检测节点提供的服务 开源 本节点地址 服务 读取南京室外温度 源码 温度显示节点显示温度值 开源 源 ...

  7. AI一分钟 | 腾讯将成立机器人实验室;机器翻译重大突破:中英翻译已达人类水平

    整理 | 阿司匹林 一分钟AI 腾讯AI Lab宣布与施普林格·自然集团旗下的自然科研正式达成战略合作,并宣布即将成立机器人实验室"Robotics X". 微软与雷德蒙研究院研发 ...

  8. 《生活随笔》相关内容将转移到个人微信公众号,本博客专注技术内容。

    <生活随笔>已转移到个人微信公众号<盐河>,本博客专注技术内容. <盐河>公众号二维码如下:

  9. 黑鲨Android系统耗电高,已达安卓顶配,黑鲨2pro作为主力机,聊聊使用感受

    原标题:已达安卓顶配,黑鲨2pro作为主力机,聊聊使用感受 可能很多人都想不到,今年已经推出过骁龙855旗舰处理器的高通,在这个7月竟然又带来了新的骁龙855Plus,而这也预示着,下半年即将出现一波 ...

最新文章

  1. matlab length_《Matlab - Robotics System Toolbox》学习笔记(2)
  2. 日常SQL常见问题(二)
  3. 深入理解java虚拟机(十三) Java 即时编译器JIT机制以及编译优化
  4. 解决Ubuntu“下载额外数据文件失败 ttf-mscorefonts-installer”的问题
  5. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持
  6. Dubbo框架应用之(三)--Zookeeper注冊中心、管理控制台的安装及解说
  7. Android持久化保存cookie
  8. 物联网卡不能使用的原因有哪些
  9. backlog配置_Nginx backlog配置概述
  10. linux编辑文本文件aa的命令,Linux如何使用正则表达式命令?文本文件操作命令
  11. 使用SQLyog创建表
  12. SuperMap iClient3D for WebGL实现三维管线分析
  13. 【Android】NanoHttpd学习(一)
  14. 极速版RPS选股,一秒出结果的方案是如何实现的!股票量化分析工具QTYX-V2.5.3...
  15. java spring security详解
  16. 【生活中的逻辑谬误】对人不对事和两难陷阱
  17. 我的世界刷猪人塔java版_我的世界僵尸猪人刷怪塔制作思路 猪人塔介绍
  18. 我的世界1.19.2最终优化模组推荐:这60个优化模组让你的体验更好
  19. Semantic UI学习(一、开始使用)
  20. python下载酷狗音乐源码

热门文章

  1. 2019云栖大会:逍遥看巅峰,张勇提“百新”,平头哥“再亮剑”
  2. 会计----会计凭证
  3. 服务器渲染技术jsp
  4. jsp上传文件到服务器
  5. 硬件电路设计(转载)
  6. 2012年Web设计和开发的15个趋势
  7. Vue笔记_01双向数据绑定原理
  8. 能ping通IP地址,ping不通主机名问题解决
  9. 编写代码的软件用什么编写的_编写出色的代码
  10. 软件测试什么是产品质量,软件测试过程质量的度量是什么?