首页 > 其他分享 >JS案例(数值动态变化)

JS案例(数值动态变化)

时间:2023-05-18 22:06:10浏览次数:35  
标签:flex item 数据 动态变化 JS 案例 innerText data updateData

一、前言

今天给大家带来一个非常好玩的js小demo,实现数值的动态变化!这个效果之前在清华大学的官网上见到过(现在他们把这个效果给取消了),之前觉得这个效果挺好玩的,这些天在复习js的时候,无意间见到了这效果,于是写了一个,想分享给大家。

效果如下:

JS案例(数值动态变化)_ico

那么它是怎么做出来的呢?  看代码

二、HTML文件:

  <div class="outer">
    <div class="counter-container">
      <i class="iconfont icon-Basket-Ball" style="font-size:50px"></i>
      <div class="counter" data-set="37062"></div>
      <span>常规赛总得分</span>
    </div>

    <div class="counter-container">
      <i class="iconfont icon-BasketballHoop" style="font-size:50px"></i>
      <div class="counter" data-set="10210"></div>
      <span>常规赛总篮板</span>
    </div>

    <div class="counter-container">
      <i class="iconfont icon-assistant" style="font-size:50px"></i>
      <div class="counter" data-set="10045"></div>
      <span>常规赛总助攻</span>
    </div>
  </div>

在这里写了一个大容器包含了三个小容器,每个小容器中的数据展示使用data-*属性 (注:data-*用于存储页面或应用程序的私有自定义数据,赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力,存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)) 我们这里就把我们自定义的数据(37062,10210,10045)传入,以便在js中使用。

三、CSS文件

* {
    box-sizing: border-box;
  }
  
 .outer {
    background-color: #8e44ad;
    color: #fff;
    font-family: 'Roboto Mono', sans-serif;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 350px;
    overflow: hidden;
    margin: 0;
  }
  
  .counter-container {
    display: flex;
    flex-direction: column;
    justify-content: center;
    text-align: center;
    margin: 30px 50px;
  }
  
  .counter {
    font-size: 60px;
    margin-top: 10px;
  }
  
  @media (max-width: 580px) {
    .outer {
      flex-direction: column;
    }
  }

css文件很简单啦,就使用了flex布局,最后小加了一个媒体查询来适应屏幕尺寸变化,大家自行看吧。

四、js文件

let counters = document.querySelectorAll('.counter')  //获取到三个counter盒子

counters.forEach(item => {
    item.innerText = '0'  //记录分数变化的变量,初始值为0

    const updateData = () => {
        const data = +item.getAttribute('data-set')  //获取到元素中绑定的数据
        const tmp = +item.innerText //临时变量保存变化一次的数据量
    
        const changeData = data / 200  //设置改变的速率

        if(tmp < data) {  //如果临时变量的值小于最终数据的值,那么就给元素进行数据相加
            item.innerText = `${Math.ceil(tmp + changeData)}`  //值数相加,然后进行取整
            setTimeout(updateData,1)  //定时器传入回调函数目的在于动态变化
        } else {
            item.innerText = data  //不满足条件后,证明得到了最终数据,直接渲染
        }

    }
    updateData()  //调用函数,启动函数
})

数据的动态改变逻辑在这里咯!

1)首先就要获取到储存数据的三个div,然后通过foreach方法遍历我们获取的三个盒子,初始的分数是为0的,因此我们把盒子的innerText设置为了0(注意:这里的0是一个字符串) 。

2)随后定义一个更新数据的方法updateData,随后获取到我们之前自定义的数据,在这里有部分朋友看到+item.getAttribute(data-set)估计都懵逼了,为啥+符号在前面呢?+代表后面的数字为正数,相当于告诉编译器,即将赋值的数值类型为数字类型,不要把数字当作字符串去拼接 。

3)然后定义一个临时变量tmp,目的在于保存item.innerText中变化后的数值,接下来设置数据变化的速率在这里是除以了200,除以的数据约大,那么变化的速率越慢,反之则快 。

4)随后去做一个判断(让临时量与总量做对比),如果临时量小于总量,就让临时量tmp与数据变化量changeData相加,做一个取整,如果不满足判断条件,直接渲染数据即可(这时的数据已经是最终的数据了,也就是我们的自定义数据) 。

5)实现数据的动态变化,最核心的还是定时器,在满足判断条件的作用域中启动定时器,传入回调函数updateData,实现1ms调用一次,数据变化看着很丝滑。





标签:flex,item,数据,动态变化,JS,案例,innerText,data,updateData
From: https://blog.51cto.com/u_15997490/6307058

相关文章

  • #yyds干货盘点#灵活的 Node.js 多功能爬虫库 —— x-crawl
    x-crawlx-crawl是一个灵活的Node.js多功能爬虫库。灵活的使用方式和众多的功能可以帮助您快速、安全、稳定地爬取页面、接口以及文件。如果你也喜欢x-crawl,可以给 x-crawl存储库 点个star支持一下,感谢大家的支持!GitHub:https://github.com/coder-hxl/x-crawl特征异步同步......
  • 文心大模型提示词笔记——应用场景案例
    发现:绝大多数应用场景的Prompt,质量都与使用者对“好结果”的了解成正比。1产品海报2写科普文 3写代码指定Markdown、js总结一下这几个例子·拿到应用场景后,先试着判断场景的任务特点,结合任务共性先优化一波。再结合场景主体、应用场合的特点,对生成内容的需求做一些补充说明。......
  • js中数组方法,超详细的哦
    一、改变原数组的方法1.push()末尾添加数据语法: 数组名.push( 数据)作用: 就是往数组末尾添加数据返回值:  就是这个数组的长度vararr=[10,20,30,40]res=arr.push(20)console.log(arr);//[10,20,30,40,20]console.log(res);//52.pop()末尾出删除数据语......
  • 用一个小故事来揭秘js加密的神秘面纱
    在夜幕降临的时刻,当人们聚集在一起分享民间鬼故事的时候,总有一种神秘的氛围弥漫在空气中。而今天,我将与你分享一个不同寻常的民间鬼故事,这个故事中隐藏着一段神秘的JS加密代码,让我们一起揭开它背后的魔法!这个鬼故事发生在一个古老的村庄,传说中有一个被诅咒的房子,据说住在那里的人会......
  • 使用sockjs-client 和 @stomp/stompjs 创建socket,断线重连机制
    importSockClientfrom'sockjs-client'constStomp=require('@stomp/stompjs')//方法createStompClient(){constthat=thisconstws=newSockClient(`/socket/api/socket-mq?access_token=${getToken()}`)this.stom......
  • 泛微CheckServer.jsp注入
    /mobile/plugin/CheckServer.jsp通过urldecode可以绕过泛微waf......
  • nodeJs 常用库之 cross-env
    楔子为什么会注意到这个库呢?起因是因为,在公司的项目package.json看到启动或者编译的命令是这样写的"start":"cross-envNODE_ENV=developmentSERVICE_NAME=testServerneststart","start:dev":"cross-envNODE_ENV=developmentSERVICE_NAME=testServerneststart--......
  • 利用python解析log日志,json文件,配置文件。
    对于喜欢偷懒的我来说,重复同样的工作是很令人头疼的事情,总想找到一条捷径,最好是一劳永逸。本次跟大家分享的是对log日志,json文件以及配置文件的解析,读取。首先是log日志的读写:读取数据:f=open("spring05注意事项.txt",mode='r',encoding='utf-8')line=f.readline()whileline......
  • js下载pdf文件
    //点击下载文件参数href:下载地址,参数filename:文件名(可自定义文件名)```downloadFile(href,fileName){//获取heads中的filename文件名leta=document.createElement("a");a.style.display="none";//给a标签创建下载的链接a.href=href;//下载后文件名a.downloa......
  • JSON
    我们为什么使用JSON代替XML来用于与服务端交换数据?JSON与XML的相同之处:JSON和XML数据都是"自我描述",都易于理解。JSON和XML数据都是有层次的结构JSON和XML数据可以被大多数编程语言使用JSON与XML的不同之处:JSON不需要结束标签JSON更加简短JSON读写......