我去!初音未来!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

关于前端web使用CSS和JavaScript实现数字自动增长和部分效果动画自动变化的效果

使用场景

  在界面载入的时候,需要根据获取到的数据,实现数字自动变化到数据的数值或动画变化为数据相关的效果(比如数字从0变化到100,电池电量从固定位置变化到一定的位置时的动画)的时候。

主要使用到的方法和属性

  JS:setInterval(定时器)、clearInterval(在数据或动画到达指定位置时停止)、innerText(配合定时器输入文本)

  CSS:transition(使用过渡效果实现动画,比较简单)、animate(使用动画效果实现动画,可以用,但没必要,对于复杂的动画时比较实用)

实现思路

  1.数字自动增长

  我目前想到的唯一方法就是在setInterva方法中使用innerText输入数值,然后当数值和数据一致的时候停止setInterval,以达到数值变化到指定数据的效果。

  实现代码

复制代码
var yuanshu = 0 //数据变化前的初始数值
const re = 50 //获取到的数据
var numAdd = setInterval(numAdd,10)
function numAdd(){
    yuanshu = yuanshu + 1 //数据变化的间隔
    document.getElementById("num").innerText = yuanshu
    if(yuanshu == re){ //检验数值是否到达数据的数值
      window.numStop()
 }
}
function numStop(){ //停止计时器 window.clearInterval(numAdd) }
复制代码

  2.动画根据数值自动变化

  这个其实除了使用css的过渡和动画,我最初想到使用JS的定时器不断修改元素的样式来实现动画的效果,但经过实践,效果实在比不上css,或许经过调整还是可以实现看起来比较流畅的效果,但属实有点脱裤子放屁的意思了。因此这里就不做介绍了(其实就是把上面的innerText修改成修改样式)。

  这里就主要以电池电量增加作为例子好了。(效果大概就像下面这张图)

  

  电池电量变化的动画其实算比较单一的,只需要改变绿色容器的宽度(竖直摆放的话也可以时高度),只需要通过JS访问绿色容器相关的元素并改变宽度(高度)为指定的百分比就可以(注意,这里绿色容器的父容器请务必设置固定的宽度,我怕容易出事儿)。

  实现代码(包含了数字增长的代码)

复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .content{
                width: 200px;
                height: 50px;
                background-color: gray;
            }
            #num{
                width: 0px;
                height: inherit;
                background-color: aquamarine;
                color: white;
                transition: width 2s;
            }
        </style>
    </head>
    <body>
    
    <div id = "content" class="content">
        <div id="num">
            
        </div>
    </div>
    <script type="text/javascript">
      var w = parseInt(window.getComputedStyle(content,null).width)
     var yuanshu = 0
     const re = 150//获取到的数据 window.onload
= function(){ //将计算后的过渡时间和宽度计算完赋给绿色容器 document.getElementById("num").style.transition = "width " +re/w+"s" document.getElementById("num").style.width = re/w*100 + "%" } var numAdd = setInterval(numAdd,re/w)//下面是数字增长的代码,可以不用看了 function numAdd(){ yuanshu = yuanshu + 1 document.getElementById("num").innerText = yuanshu if(yuanshu == re){ window.numStop() } } function numStop(){ window.clearInterval(numAdd) } </script> </body> </html>
复制代码

第一次写这种东西,有看不懂的话。。。。只能说小生不才请见谅。如果可以的话请在评论区留下您的建议和问题。

posted on   你完全不写博客是吗?  阅读(3525)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示