關於前端web使用CSS和JavaScript實現數字自動增長和部分效果動畫自動變化的效果


使用場景

  在界面載入的時候,需要根據獲取到的數據,實現數字自動變化到數據的數值或動畫變化為數據相關的效果(比如數字從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>

第一次寫這種東西,有看不懂的話。。。。只能說小生不才請見諒。如果可以的話請在評論區留下您的建議和問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM