夏天到了,画个会加速的小风车

872 阅读2分钟

我正在参加「初夏创意投稿大赛」详情请看:初夏创意投稿大赛

前言

我们之前已经完成了一个小风车,但是呢,过于单调了,我打算给它加一个棍子,再加一个可以控制转动速度的按钮,就很完美了

思路

  1. 棍子可以使用一个div元素,通过定位把他定位到风车中间,然后把两头变圆,这样一个风车棍子就完成了
  2. 控制速度本质上是控制animation的duration属性,动画完成时间越短,速度越快

实现

现在dom中添加一个棍子的div

<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
<div class="rod"></div>

rod就代表我们风车的棍子 首先把棍子定位到风车中间,然后把头部变圆

.rod {
    position: absolute;
    width: 10px;
    height: 200px;
    background-color: #a3f93b;
    left: 50%;
    top: 100px;
    transform: translate(-5px);
    border-top-left-radius: 50%;
    border-top-right-radius: 50%;
}

此时的棍子已经在风车中间了

看下效果 Snipaste_2022-05-24_16-15-32.png

棍子已经完成,下一步我们来添加两个按钮,绑定click事件,控制风车的转动速度 按钮采用flex布局,分布在分车棍子的两边 先看html

<div id="app">
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <div class="rod"></div>
    <div class="btn">
        <button>加速</button>
        <button>减速</button>
    </div>
</div>

css中

.btn {
    display: flex;
    justify-content: space-around;
    margin-top: 150px;
}

button {
    width: 50px;
    border: none;
    background-color: aqua;
    border-radius: 15px;
}

给btn添加事件

定义一个timer来控制动画完成的时间 通过操作dom的style的animationDuration属性,来控制

const btns = document.querySelectorAll("button")
const car = document.querySelector("ul")
let timer = 3
btns[0].addEventListener("click", () => {
    car.style.animationDuration = (timer - 0.5) + "s"
    timer -= 0.5
})
btns[1].addEventListener("click", () => {
    car.style.animationDuration = (timer + 0.5) + "s"
    timer += 0.5
})

此时我们已经可以自由控制风车的速度了,而且没美观了很多,但是当timer = 0时会停止,我们可以判断一下是否为0,如果是,那么就让他变成0.1好了

btns[0].addEventListener("click", () => {
    timer -= 0.5
    if (timer === 0) {
        timer = 0.1
    }
    car.style.animationDuration = (timer) + "s"

})

这样当timer为0,就会是0.1

结束

先看效果

chrome_OHXFRiZDGJ.gif ok,大家如果喜欢,记得点个赞,爱你