发布于 2026-01-06 1 阅读
0

自学使用 CSS 和 JavaScript 制作动画计时器

使用 CSS 和 JavaScript 制作动画计时器

自学

我在 General Assembly 的时光即将结束,直接的教学指导越来越少,更多的是鼓励我们在广阔的 Web 开发领域自由探索。最近,我们甚至专门用了一整天的时间自学 GA 课程之外的其他编程语言或技能。

我选择创建一个带有 CSS 动画的 JavaScript 计时器。

我为什么选择这个科目?

我的毕业设计项目有一个想法,如果通过 JavaScript 触发 CSS 动画,视觉效果会大大提升。

它解决了什么问题?/ 为什么人们会使用它?

它与其说是解决了问题,不如说是有可能让现有项目在美学上更吸引用户。

赏心悦目的视觉效果使用户界面更容易理解和操作,也更容易向潜在买家或用户销售。

还有哪些替代方案?

我的网站几乎没有任何样式,或者是一个静态网页,唯一活动的元素是 JavaScript 计时器,这看起来可能相当不吸引人或乏味。

自学

第一步——制作计时器。

幸运的是,互联网信息浩瀚,提供了许多 JavaScript 计时器的示例。我使用了w3schools上的一个示例,并根据我的需求进行了修改(从 1 分钟开始倒计时)。

注意:我还设置了计时器归零后 1 分钟重新启动,以确保动画在页面加载过程中多次播放。

第二步——添加基本CSS样式。

确定倒计时器的静态版本应该是什么样子,并定义所有必要的类。(这很简单。)

第三步——学习动画制作。

动画与转场

过渡效果应用于元素,并指定在一段时间内逐渐发生的变化。

动画会在后台运行而不管用户或网站其他部分发生什么。

这时我才意识到,整个项目的名称(用 CSS 和 JavaScript 制作动画计时器)是个谎言。我实际制作的是用 CSS 和 JavaScript 制作的过渡计时器。

第四步 - 添加独立于 JavaScript 的动画

我可以在 CSS 代码中添加一个 div 元素,使其在指定时间内缩小。

.visual-timer {
    border-top: 50px solid #004D00;
    margin: 5% auto;
    width: 50%;
}

.width-change {
    /* Animation code */
    -webkit-animation-name: widthChange; /* Safari 4.0 - 8.0 */
    -webkit-animation-duration: 60s; /* Safari 4.0 - 8.0 */
    animation-name: widthChange;
    animation-duration: 60s;
}

@keyframes widthChange {
    from {width: 600px;}
    to {width: 0px;}
}
Enter fullscreen mode Exit fullscreen mode

第五步 - 将动画的开始与 JS 函数的开始连接起来

通过visualTimer.classList.add("width-change");在函数开头添加代码,我可以在倒计时开始时启动动画。但是,它只能运行一次,之后在倒计时重置时不会再次启动。

这个问题很容易解决,只需visualTimer.classList.remove("width-change");在计时器重置时添加代码,允许函数在循环执行时重新初始化动画即可。

在研究过程中,你遇到的最大概念性障碍(如果有的话)是什么?

这时,我仍然对动画与倒计时不符的情况感到不满。动画播放不一致,有时倒计时还剩30秒时,动画已经播放过半了。

但后来我找到了另一种方法来分解动画,使其播放速度放慢。

@keyframes widthChange {
    0%   {width: 600px;}
    25%  {width: 450px;}
    50%  {width: 300px;}
    75%  {width: 150px;}
    100% {width: 0px;}
}
Enter fullscreen mode Exit fullscreen mode

这样一来,当计时器显示30秒时,动画播放到一半就结束了。但是,宽度变化的速度仍然不如我预期的那样稳定。

在学习过程中,哪些文章或论坛对你最有帮助?

https://css-tricks.com/controlling-css-animations-transitions-javascript/
https://www.sitepoint.com/css3-animation-javascript-event-handlers/
https://www.w3schools.com/css/css3_animations.asp
https://www.w3schools.com/howto/howto_js_add_class.asp
https://gomakethings.com/two-ways-to-set-an-elements-css-with-vanilla-javascript/

为了未来

除了动画效果更加流畅之外,我还希望动画持续时间能根据计时器的变化而变化。也就是说,如果计时器变长或变短,动画速度也会相应加快或减慢。

我想到的一些解决方案是集成 SASS,或者直接在 JavaScript 中构建样式,并将持续时间设为变量。如果大家有什么建议,欢迎提出!

CodePen 的修改版本

文章来源:https://dev.to/nikacodes/making-an-animated-timer-with-css--javascript-jpa