CSS 計數器的妙用:數字遞增動效
CSS 計數器的妙用:數字遞增動效
CSS 計數器是由 CSS 維護的變數,這些變數可根據 CSS 規則增加從而跟蹤使用次數。我們可以利用這個特性,根據文件位置來調整內容表現,比如顯示列表編號。
最近在公司官網就用到了這個特性:
image.png
image.png
因為這裡的序號只是個裝飾,並不強調先後順序。比起使用真實 DOM 元素顯示序號,CSS 計數器更加簡潔靈活,萬一內容順序需要調整,序號也不受影響。
有時候我們會看到某些 Dashboard 介面有數字快速滾動的效果,比如招行 App 的賬戶餘額。這種效果怎麼實現呢?本文會介紹幾種方法。
JavaScript 方案
最簡單的莫過於用 setInterval定時器了,定期修改 DOM 內容就行。不過為了實現更平順的動畫效果,更推薦使用 requestAnimationFrame:
function animateValue(obj, start, end, duration) {
let startTimestamp = null;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
obj.innerHTML = Math.floor(progress * (end - start) + start);
if (progress < 1) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
}
const obj = document.getElementById(“value”);
animateValue(obj, 100, 0, 5000);
js.gif
js.gif
CSS @keyframes 結合 margin
這個思路比較有意思,原理是把數字排成一行,通過動畫移動元素位置來顯示不同位置的數字:
@keyframes countNumber {
0% {
margin-left: 0px;
}
100% {
margin-left: -1000px;
}
}
keyframe.gif
keyframe.gif
CSS 計數器入門版
CSS 計數器使用到以下幾個屬性:
counter-reset - 建立或者重置計數器
counter-increment - 遞增變數
content - 插入生成的內容
counter() 或 counters() 函式 - 將計數器的值新增到元素
要使用 CSS 計數器,得先用 counter-reset 建立。結合 CSS 動畫 @keyframes,在動畫的不同階段設定不同的遞增值,就能實現這個效果:
div::after { content: counter(count); animation: counter 3s linear infinite alternate; counter-reset: count 0; }@keyframes counter {
0% {
counter-increment: count 0;
}
10% {
counter-increment: count 1;
}
20% {
counter-increment: count 2;
}
30% {
counter-increment: count 3;
}
40% {
counter-increment: count 4;
}
50% {
counter-increment: count 5;
}
60% {
counter-increment: count 6;
}
70% {
counter-increment: count 7;
}
80% {
counter-increment: count 8;
}
90% {
counter-increment: count 9;
}
100% {
counter-increment: count 10;
}
}
CSS 計數器高配版
更進一步,如果敢用最新特性,其實有更秀的操作,那就是給 CSS 變數設定動畫。這個技巧的核心就是設定 CSS 自定義屬性為整數型別,這樣就能像其他擁有整數型別值的 CSS 屬性一樣,可用於 transition中了。
@property --num {
syntax: ‘’;
initial-value: 0;
inherits: false;
}
div {
transition: --num 1s;
counter-reset: num var(–num);
}
div:hover {
–num: 10000;
}
div::after {
content: counter(num);
}
不過需要注意的是,目前只有 Chrome (或者 Chromium 核心的瀏覽器比如 Edge 和 Opera)支援 @property語法,因此相容性是個問題。如果你的頁面只針對 Chrome(比如 Electron 應用),那就可以放心使用。否則還是用前面的保守方案吧。
小數也能玩動畫
前面說的變數都要求是整數,那能不能讓小數也支援這種動畫呢?答案是可以的。
可以把小數轉成整數。步驟原理是:
註冊一個整型的 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 */
如果只需要提取整數部分,可以這樣: --integer: max(var(–number) - 0.5, 0),連calc()都不需要了。類似方法可以提取小數部分。
/* @property --integer /
–number: 1234.5678;
–integer: max(var(–number) - 0.5, 0); / 1234 */
完整程式碼:
div {
font: 800 40px monospace;
padding: 2rem;
transition: --percent 1s;
–temp: calc(var(–percent) * 100);
–v1: max(var(–temp) - 0.5, 0);
–v2: max((var(–temp) - var(–v1)) * 100 - 0.5, 0);
counter-reset: v1 var(–v1) v2 var(–v2);
}
div::before {
content: counter(v1) “.” counter(v2, decimal-leading-zero) “%”;
}
const genNumber = () => {
document.querySelector(“div”).style.setProperty("–percent", Math.random());
};
setInterval(genNumber, 2000);
setTimeout(genNumber);
相關文章
- 你有了解css計數器(序列數字字元自動遞增)嗎?如何透過css的content屬性實現呢?CSS字元
- 使用CSS計數器美化數字有序列表CSS
- excel下拉數字不遞增只複製 excel表格下拉數字不遞增怎麼操作Excel
- 【LeetCode】738. 單調遞增的數字LeetCode
- 力扣-738. 單調遞增的數字力扣
- 如何讓CSS計數器支援小數的動態變化?CSS
- 單調遞增的數
- 使用 CSS 計數器CSS
- vue 數字滾動遞增效果Vue
- CSS 計數器簡介CSS
- 遞推--找數字
- 資料庫數字參考表的妙用OM資料庫
- 深入理解CSS計數器CSS
- css child選擇器妙用CSS
- css3動畫實現數字動態增加CSSS3動畫
- 遞增的整數序列連結串列的插入
- 使用CSS計數器美化有序列表CSS
- 強大的CSS: 使用“變數種子計數器”擴充套件動畫更多可能性CSS變數套件動畫
- 智慧城市沙盤在數字展廳中有哪些妙用?
- 1295 統計位數為偶數的數字
- 如何實現Redis裡的自增ID計數器Redis
- 統計位數為偶數的數字(C++)C++
- jquery計數器動畫特效jQuery動畫特效
- 數字化轉型取得初效,如今智慧數字化經營可以做嗎?
- CSS 還原拉斯維加斯球數字動畫CSS動畫
- 統計輸入的數字為正數和負數的個數
- 如何計算PHP函式中傳遞的引數數量PHP函式
- 自定義計數器小技巧!CSS 實現長按點贊累加動畫CSS動畫
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- FPGA數字訊號處理(25)數字相關器設計(經典結構)FPGA
- 動畫合成小技巧!CSS 實現動感的倒數計時效果動畫CSS
- IC數字設計
- 計數器
- MATLAB訊號處理——數字濾波器的設計Matlab
- 乘勢而上,OceanBase推動數字支付精益增長
- CSS中content屬性的妙用CSS
- IAB:預計2022年數字影片廣告支出增長26%
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器