0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CSS 計數(shù)器的數(shù)字遞增動效技術(shù)解析

454398 ? 來源:oschina ? 作者:李中凱 ? 2020-10-18 10:09 ? 次閱讀

CSS 計數(shù)器是由 CSS 維護的變量,這些變量可根據(jù) CSS 規(guī)則增加從而跟蹤使用次數(shù)。我們可以利用這個特性,根據(jù)文檔位置來調(diào)整內(nèi)容表現(xiàn),比如顯示列表編號。

最近在公司官網(wǎng)就用到了這個特性:

image.png

因為這里的序號只是個裝飾,并不強調(diào)先后順序。比起使用真實 DOM 元素顯示序號,CSS 計數(shù)器更加簡潔靈活,萬一內(nèi)容順序需要調(diào)整,序號也不受影響。

有時候我們會看到某些 Dashboard 界面有數(shù)字快速滾動的效果,比如招行 App 的賬戶余額。這種效果怎么實現(xiàn)呢?本文會介紹幾種方法。

JavaScript 方案

最簡單的莫過于用setInterval定時器了,定期修改 DOM 內(nèi)容就行。不過為了實現(xiàn)更平順的動畫效果,更推薦使用requestAnimationFrame:

functionanimateValue(obj,start,end,duration){
letstartTimestamp=null;
conststep=(timestamp)=>{
if(!startTimestamp)startTimestamp=timestamp;
constprogress=Math.min((timestamp-startTimestamp)/duration,1);
obj.innerHTML=Math.floor(progress*(end-start)+start);
if(progress

js.gif

CSS @keyframes 結(jié)合 margin

這個思路比較有意思,原理是把數(shù)字排成一行,通過動畫移動元素位置來顯示不同位置的數(shù)字:



0
1
2
3
4
5
6
7
8
9
10
.counter{
width:100px;
overflow:hidden;
}
.numbers{
width:auto;
display:flex;
animation:countNumber4sinfinitealternate;
animation-timing-function:steps(10);
}
.numbersdiv{
text-align:center;
flex:00100px;
}

@keyframescountNumber{
0%{
margin-left:0px;
}
100%{
margin-left:-1000px;
}
}

keyframe.gif

CSS 計數(shù)器入門版

CSS 計數(shù)器使用到以下幾個屬性:

counter-reset - 創(chuàng)建或者重置計數(shù)器

counter-increment - 遞增變量

content - 插入生成的內(nèi)容

counter() 或 counters() 函數(shù) - 將計數(shù)器的值添加到元素

要使用 CSS 計數(shù)器,得先用 counter-reset 創(chuàng)建。結(jié)合 CSS 動畫@keyframes,在動畫的不同階段設(shè)置不同的遞增值,就能實現(xiàn)這個效果:

div::after{
content:counter(count);
animation:counter3slinearinfinitealternate;
counter-reset:count0;
}

@keyframescounter{
0%{
counter-increment:count0;
}
10%{
counter-increment:count1;
}
20%{
counter-increment:count2;
}
30%{
counter-increment:count3;
}
40%{
counter-increment:count4;
}
50%{
counter-increment:count5;
}
60%{
counter-increment:count6;
}
70%{
counter-increment:count7;
}
80%{
counter-increment:count8;
}
90%{
counter-increment:count9;
}
100%{
counter-increment:count10;
}
}

CSS 計數(shù)器高配版

更進一步,如果敢用最新特性,其實有更秀的操作,那就是給 CSS 變量設(shè)置動畫。這個技巧的核心就是設(shè)置 CSS 自定義屬性為整數(shù)類型,這樣就能像其他擁有整數(shù)類型值的 CSS 屬性一樣,可用于transition中了。

@property--num{
syntax:'';
initial-value:0;
inherits:false;
}

div{
transition:--num1s;
counter-reset:numvar(--num);
}
div:hover{
--num:10000;
}
div::after{
content:counter(num);
}

不過需要注意的是,目前只有 Chrome (或者 Chromium 內(nèi)核的瀏覽器比如 Edge 和 Opera)支持@property語法,因此兼容性是個問題。如果你的頁面只針對 Chrome(比如 Electron 應(yīng)用),那就可以放心使用。否則還是用前面的保守方案吧。

小數(shù)也能玩動畫

前面說的變量都要求是整數(shù),那能不能讓小數(shù)也支持這種動畫呢?答案是可以的。

可以把小數(shù)轉(zhuǎn)成整數(shù)。步驟原理是:

注冊一個整型的 CSS 變量(即--number),指定初始值initial-value。

用calc將值取整:--integer: calc(var(--number))

@property--integer{
syntax:"";
initial-value:0;
inherits:false;
}
--number:1234.5678;
--integer:calc(var(--number));/*1235*/

如果只需要提取整數(shù)部分,可以這樣:--integer: max(var(--number) - 0.5, 0),連calc()都不需要了。類似方法可以提取小數(shù)部分。

/*@property--integer*/
--number:1234.5678;
--integer:max(var(--number)-0.5,0);/*1234*/

完整代碼:

@property--percent{
syntax:"";
initial-value:0;
inherits:false;
}
@property--temp{
syntax:"";
initial-value:0;
inherits:false;
}
@property--v1{
syntax:"";
initial-value:0;
inherits:false;
}
@property--v2{
syntax:"";
initial-value:0;
inherits:false;
}

div{
font:80040pxmonospace;
padding:2rem;
transition:--percent1s;
--temp:calc(var(--percent)*100);
--v1:max(var(--temp)-0.5,0);
--v2:max((var(--temp)-var(--v1))*100-0.5,0);
counter-reset:v1var(--v1)v2var(--v2);
}
div::before{
content:counter(v1)"."counter(v2,decimal-leading-zero)"%";
}
constgenNumber=()=>{
document.querySelector("div").style.setProperty("--percent",Math.random());
};

setInterval(genNumber,2000);
setTimeout(genNumber);


編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 0人收藏

    評論

    相關(guān)推薦
    熱點推薦

    雷電(雷擊)計數(shù)器的原理、作用及行業(yè)應(yīng)用解決方案

    安全事故。雷電(雷擊)計數(shù)器作為防雷系統(tǒng)中的重要組成部分,扮演著“記錄雷擊事件、輔助安全運維”的關(guān)鍵角色,已經(jīng)成為智能防雷系統(tǒng)中不可或缺的一環(huán)。 二、雷電(雷擊)計數(shù)器的原理 1. 工作原理 雷電計數(shù)器主要依靠電磁
    的頭像 發(fā)表于 06-12 15:14 ?75次閱讀
    雷電(雷擊)<b class='flag-5'>計數(shù)器</b>的原理、作用及行業(yè)應(yīng)用解決方案

    數(shù)字電路—24、計數(shù)器

    數(shù)字電路中,能夠記憶輸入脈沖個數(shù)的電路稱為計數(shù)器
    發(fā)表于 03-26 15:13

    UC-018:時間間隔計數(shù)器的用途

    電子發(fā)燒友網(wǎng)站提供《UC-018:時間間隔計數(shù)器的用途.pdf》資料免費下載
    發(fā)表于 01-13 17:02 ?0次下載
    UC-018:時間間隔<b class='flag-5'>計數(shù)器</b>的用途

    智能雷擊計數(shù)器的綜合行業(yè)解決方案

    遠程監(jiān)控和數(shù)據(jù)傳輸。 智能雷擊計數(shù)器的工作原理 智能雷擊計數(shù)器主要依賴于電磁感應(yīng)、雷電電流檢測及信號處理技術(shù)來實現(xiàn)其功能。 電磁感應(yīng)與電流采集 當(dāng)雷電流通過避雷針、避雷帶或其他導(dǎo)體時,雷擊計數(shù)
    的頭像 發(fā)表于 12-20 10:50 ?448次閱讀
    智能雷擊<b class='flag-5'>計數(shù)器</b>的綜合行業(yè)解決方案

    雷擊計數(shù)器的概述與應(yīng)用分析

    雷擊計數(shù)器 是一種用于監(jiān)測和記錄電力系統(tǒng)、通信系統(tǒng)、建筑物等關(guān)鍵設(shè)施遭受雷擊次數(shù)的設(shè)備。它能夠有效地幫助管理人員掌握雷電活動的情況,以便進行預(yù)防性維護和風(fēng)險評估。雷擊計數(shù)器根據(jù)工作原理可以分為無源
    的頭像 發(fā)表于 10-21 10:31 ?725次閱讀
    雷擊<b class='flag-5'>計數(shù)器</b>的概述與應(yīng)用分析

    頻率計數(shù)器技術(shù)原理和應(yīng)用場景

    頻率計數(shù)器,又稱頻率計,是一種專門用于測量信號頻率的電子測量儀器。以下是對其技術(shù)原理和應(yīng)用場景的詳細分析:一、技術(shù)原理頻率計數(shù)器技術(shù)原理基
    發(fā)表于 10-18 14:03

    74ls163是幾進制同步計數(shù)器

    74LS163 是一個十進制同步計數(shù)器,它是一個集成電路(IC),用于數(shù)字電路中進行計數(shù)操作。它是一個4位二進制計數(shù)器,但由于其設(shè)計,它可以很容易地被配置為一個十進制
    的頭像 發(fā)表于 10-18 13:54 ?2616次閱讀

    臺式塵埃粒子計數(shù)器的優(yōu)勢有哪些

    在當(dāng)今精密制造與潔凈環(huán)境日益重要的背景下,臺式塵埃粒子計數(shù)器憑借其全面的監(jiān)測與記錄能力,成為了眾多行業(yè)的質(zhì)量控制工具。臺式塵埃粒子計數(shù)器不僅集成了溫濕度及大氣壓力測量功能,更是將智能化監(jiān)測推向新高度。
    的頭像 發(fā)表于 10-17 13:25 ?458次閱讀

    激光塵埃粒子計數(shù)器如何使用能測出準(zhǔn)確的數(shù)據(jù)

    激光塵埃粒子計數(shù)器如何使用能測出準(zhǔn)確的數(shù)據(jù)
    的頭像 發(fā)表于 09-30 10:04 ?638次閱讀
    激光塵埃粒子<b class='flag-5'>計數(shù)器</b>如何使用能測出準(zhǔn)確的數(shù)據(jù)

    臺式塵埃粒子計數(shù)器的功能優(yōu)勢與應(yīng)用

    一、臺式塵埃粒子計數(shù)器的工作原理 臺式塵埃粒子計數(shù)器是用于測量空氣中塵埃顆粒物濃度的儀器,它基于激光散射原理能夠連續(xù)采集并計算單位體積內(nèi)空氣中不同粒徑的懸浮顆粒物個數(shù),即顆粒物濃度分布,進而換算成為
    的頭像 發(fā)表于 09-14 16:41 ?748次閱讀

    正交解碼計數(shù)器

    正交解碼計數(shù)器
    發(fā)表于 09-06 11:41 ?0次下載

    計數(shù)器的特點和參數(shù)

    計數(shù)器作為一種常用的電子元件,在電子設(shè)備和系統(tǒng)中扮演著至關(guān)重要的角色。它們不僅用于存儲和增減數(shù)字值,還廣泛應(yīng)用于時序和頻率測量、事件計數(shù)、控制步進電機和伺服系統(tǒng)、錯誤檢測和糾正以及計算機數(shù)據(jù)存儲和操作等領(lǐng)域。以下將詳細闡述
    的頭像 發(fā)表于 08-29 14:54 ?2432次閱讀

    計數(shù)器同步和異步怎么判斷

    計數(shù)器同步和異步是數(shù)字電路設(shè)計中的一個重要概念,它們在很多應(yīng)用場景中都扮演著關(guān)鍵角色。 一、計數(shù)器概述 計數(shù)器是一種常見的數(shù)字電路,它可以對
    的頭像 發(fā)表于 07-23 11:14 ?2467次閱讀

    PLC計數(shù)器的工作原理與功能

    至關(guān)重要的角色。計數(shù)器能夠統(tǒng)計輸入信號的脈沖次數(shù),實現(xiàn)對某個事件的計數(shù)和監(jiān)控,是控制系統(tǒng)實現(xiàn)精確控制的關(guān)鍵元件之一。本文將詳細闡述PLC中計數(shù)器的原理與功能,以期為相關(guān)技術(shù)人員提供參考
    的頭像 發(fā)表于 06-18 11:51 ?3621次閱讀

    提升效率的利器——10進制計數(shù)器的使用指南

    數(shù)字化時代,高效的數(shù)據(jù)管理和統(tǒng)計已成為提升工作效率的關(guān)鍵。同步10進制計數(shù)器,作為一款專為現(xiàn)代工作場景設(shè)計的計數(shù)工具,正引導(dǎo)著一場管理轉(zhuǎn)型。無論是商業(yè)統(tǒng)計、學(xué)術(shù)研究還是日常生活中的計數(shù)
    的頭像 發(fā)表于 06-14 14:50 ?797次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品