使用場景
在界面載入的時候,需要根據獲取到的數據,實現數字自動變化到數據的數值或動畫變化為數據相關的效果(比如數字從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>
第一次寫這種東西,有看不懂的話。。。。只能說小生不才請見諒。如果可以的話請在評論區留下您的建議和問題。