超好玩js頁面效果之實現(xiàn)數(shù)值的動態(tài)變化
前言
好兄弟們,今天給大家?guī)硪粋€非常好玩的js小demo,實現(xiàn)數(shù)值的動態(tài)變化!這個效果之前在清華大學(xué)的官網(wǎng)上見到過(現(xiàn)在他們把這個效果給取消了),之前覺得這個效果挺好玩的,這些天在復(fù)習(xí)js的時候,無意間見到了這效果,于是寫了一個,想分享給大家,嘻嘻嘻!??????
效果如下:
話不多說,直接給好兄弟們上代碼:
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>常規(guī)賽總得分</span> </div> <div class="counter-container"> <i class="iconfont icon-BasketballHoop" style="font-size:50px"></i> <div class="counter" data-set="10210"></div> <span>常規(guī)賽總籃板</span> </div> <div class="counter-container"> <i class="iconfont icon-assistant" style="font-size:50px"></i> <div class="counter" data-set="10045"></div> <span>常規(guī)賽總助攻</span> </div> </div>
代碼解析:
在這里寫了一個大容器包含了三個小容器,每個小容器中的數(shù)據(jù)展示使用
data-*
屬性
(注:data-*
用于存儲頁面或應(yīng)用程序的私有自定義數(shù)據(jù),賦予我們在所有 HTML 元素上嵌入自定義 data 屬性
的能力,存儲的(自定義)數(shù)據(jù)能夠被頁面的 JavaScript 中利用
,以創(chuàng)建更好的用戶體驗(不進行 Ajax 調(diào)用或服務(wù)器端數(shù)據(jù)庫查詢
))
我們這里就把我們自定義的數(shù)據(jù)(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
布局,最后小加了一個媒體查詢
來適應(yīng)屏幕尺寸變化,大家自行看吧。
js文件:
let counters = document.querySelectorAll('.counter') //獲取到三個counter盒子 counters.forEach(item => { item.innerText = '0' //記錄分?jǐn)?shù)變化的變量,初始值為0 const updateData = () => { const data = +item.getAttribute('data-set') //獲取到元素中綁定的數(shù)據(jù) const tmp = +item.innerText //臨時變量保存變化一次的數(shù)據(jù)量 const changeData = data / 200 //設(shè)置改變的速率 if(tmp < data) { //如果臨時變量的值小于最終數(shù)據(jù)的值,那么就給元素進行數(shù)據(jù)相加 item.innerText = `${Math.ceil(tmp + changeData)}` //值數(shù)相加,然后進行取整 setTimeout(updateData,1) //定時器傳入回調(diào)函數(shù)目的在于動態(tài)變化 } else { item.innerText = data //不滿足條件后,證明得到了最終數(shù)據(jù),直接渲染 } } updateData() //調(diào)用函數(shù),啟動函數(shù) })
代碼解析:
數(shù)據(jù)的動態(tài)改變邏輯在這里咯!
- 首先就要獲取到儲存數(shù)據(jù)的三個div,然后通過foreach方法遍歷我們獲取的三個盒子,初始的分?jǐn)?shù)是為0的,因此我們把盒子的innerText設(shè)置為了0(注意:這里的0是一個字符串)
- 隨后定義一個更新數(shù)據(jù)的方法updateData,隨后獲取到我們之前自定義的數(shù)據(jù),在這里有部分朋友看到+item.getAttribute(data-set)估計都懵逼了,為啥+符號在前面呢?+代表后面的數(shù)字為正數(shù),相當(dāng)于告訴編譯器,即將賦值的數(shù)值類型為數(shù)字類型,不要把數(shù)字當(dāng)作字符串去拼接
- 然后定義一個臨時變量tmp,目的在于保存item.innerText中變化后的數(shù)值,接下來設(shè)置數(shù)據(jù)變化的速率在這里是除以了200,除以的數(shù)據(jù)約大,那么變化的速率越慢,反之則快
- 隨后去做一個判斷(讓臨時量與總量做對比),如果臨時量小于總量,就讓臨時量tmp與數(shù)據(jù)變化量changeData相加,做一個取整,如果不滿足判斷條件,直接渲染數(shù)據(jù)即可(這時的數(shù)據(jù)已經(jīng)是最終的數(shù)據(jù)了,也就是我們的自定義數(shù)據(jù))
- 實現(xiàn)數(shù)據(jù)的動態(tài)變化,最核心的還是定時器,在滿足判斷條件的作用域中啟動定時器,傳入回調(diào)函數(shù)updateData,實現(xiàn)1ms調(diào)用一次,數(shù)據(jù)變化看著很絲滑.
寫在最后:
js的實現(xiàn)邏輯一步步的來,會發(fā)現(xiàn)邏輯很清晰,希望大家在寫js代碼的時候,一步步下手,要不然很容易邏輯混亂,以后的話沒事會給大家分享一些js
小demo,一起去搞一些好玩的東西!在娛樂的同時還能提高js的開發(fā)能力!??!????
到此這篇關(guān)于超好玩js頁面效果之實現(xiàn)數(shù)值的動態(tài)變化的文章就介紹到這了,更多相關(guān)js實現(xiàn)數(shù)值動態(tài)變化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js獲取TreeView控件選中節(jié)點的Text和Value值的方法
在實際項目中,遇到一個問題,首先彈出一個新窗口,新窗口中放了一個TreeView控件,現(xiàn)在要解決的是,如何單擊TreeView中一個節(jié)點,返回Text和Value到父頁面并關(guān)閉該新窗口,本文將詳細(xì)介紹此方法的實現(xiàn)2012-11-11CocosCreator ScrollView優(yōu)化系列之分幀加載
這篇文章主要介紹了CocosCreator ScrollView的優(yōu)化,從分幀加載進行了講解,對性能優(yōu)化感興趣的同學(xué),一定要看一下2021-04-04javascript中SetInterval與setTimeout的定時器用法
Javascript的setTimeOut和setInterval函數(shù)應(yīng)用非常廣泛,它們都用來處理延時和定時任務(wù),比如打開網(wǎng)頁一段時間后彈出一個登錄框,頁面每隔一段時間發(fā)送異步請求獲取最新數(shù)據(jù)等,本文文章通過代碼示例給大家介紹javascript中SetInterval與setTimeout的定時器用法2015-08-08JavaScript逆向調(diào)試技巧總結(jié)分享
當(dāng)我們抓取網(wǎng)頁端數(shù)據(jù)時,經(jīng)常被加密參數(shù)、加密數(shù)據(jù)所困擾,如何快速定位這些加解密函數(shù),尤為重要,下面這篇文章主要給大家介紹了關(guān)于JavaScript逆向調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下2022-06-06JavaScript的public、private和privileged模式
公共/私有變量和方法通過一個簡單的的例子,來展示如何使用JavaScript在類里面創(chuàng)建私有變量和方法2009-12-12javascript 文字上下間隔滾動的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版
javascript 文字上下間隔滾動的代碼 符合WEB標(biāo)準(zhǔn) 腳本之家修正版,這里提供了兩個版本,第二個在firefox下運行有些問題大家可以修改下,第一個的高度問題,已經(jīng)修正,其實就是簡單的加了css樣式。2009-12-12使用bat打開多個cmd窗口執(zhí)行g(shù)ulp、node
本文主要介紹了使用bat打開多個cmd窗口執(zhí)行g(shù)ulp、node的方法。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02