十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹web開發(fā)中如何實現(xiàn)大屏數(shù)字滾動效果,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鹿寨,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
大屏數(shù)字滾動效果來源于最近工作中一張大屏的UI圖,該UI圖上有一個模塊需要有數(shù)字往上翻動的效果,以下是最終實現(xiàn)的效果:
思路
在實現(xiàn)此效果之前,我們先來捋一下思路,用思維導(dǎo)圖來設(shè)計一下我們的實現(xiàn)步驟,如下:
初步實現(xiàn)
你可以審查元素,下載數(shù)字背景圖片

有了以上的設(shè)計流程,我們先來簡單實現(xiàn)一下
html 結(jié)構(gòu)
1
關(guān)鍵 css
.box-item {
position: relative;
display: inline-block;
width: 54px;
height: 82px;
/* 背景圖片 */
background: url(./number-bg.png) no-repeat center center;
background-size: 100% 100%;
font-size: 62px;
line-height: 82px;
text-align: center;
}實現(xiàn)以上代碼后,它的效果將是下面這樣的:

思考:背景框中有了數(shù)字以后,我們現(xiàn)在來思考一下,背景框中的文字,一定是 0-9 之前的數(shù)字,要在不打亂以上 html 結(jié)構(gòu)的前提下,如何讓數(shù)字滾動起來呢?這個時候我們的魔爪就伸向了一個 CSS 屬性: writing-mode ,下面是它屬性的介紹:
horizontal-tb:默認(rèn)值,表示水平排版,從上到下。
vertical-lr:表示垂直排版,從左到右。
vertical-rl:表示垂直排版,從右到左。
它的實時效果是像下面這樣:

根據(jù)以上的靈感,我們可以實現(xiàn)下面這樣的效果:

html 改動部分:
0123456789
css 改動部分:
.box-item {
display: inline-block;
width: 54px;
height: 82px;
background: url(./number-bg.png) no-repeat center center;
background-size: 100% 100%;
font-size: 62px;
line-height: 82px;
text-align: center;
/* 新加部分的代碼 */
position: relative;
writing-mode: vertical-lr;
text-orientation: upright;
/* overflow: hidden; */
}
/* 新加部分的代碼 */
.box-item span {
position: absolute;
top: 10px;
left: 50%;
transform: translateX(-50%);
letter-spacing: 10px;
}計算滾動
如果我們想讓數(shù)字滾動到 5 ,那么滾動的具體到底是多少?
答案是:向下滾動 -50%
那么其他的數(shù)字呢?
得益于我們特殊的實現(xiàn)方法,每一位數(shù)字的滾動距離有一個通用的公式:
transform: `translate(-50%,-${number * 10}%)`有了以上公式,我們讓數(shù)字滾動到 5 ,它的效果如下:

css 改動部分:
.box-item span {
position: absolute;
top: 10px;
left: 50%;
transform: translate(-50%,-50%);
letter-spacing: 10px;
}滾動動畫的實現(xiàn)
在知道了每一個數(shù)字具體的滾動距離后,我們來設(shè)計一下,讓數(shù)字能夠隨機滾動起來:
以下是具體的隨機滾動 js
代碼:
setInterval(() => {
let number = document.getElementById('Number')
let random = getRandomNumber(0,10)
number.style.transform = `translate(-50%, -${random * 10}%)`
}, 2000)
function getRandomNumber (min, max) {
return Math.floor(Math.random() * (max - min + 1) + min)
}至此,我們數(shù)字滾動效果已經(jīng)初步實現(xiàn)了,在下一節(jié)中我們將會逐步完善此效果,以滿足業(yè)務(wù)需求。
完善
在上一節(jié)中,我們初步完成了滾動的效果,這一節(jié)我們將根據(jù)最開始的思維導(dǎo)圖來設(shè)計一個通用的 Vue 業(yè)務(wù)組件
接受參數(shù)
此組件只接受一個數(shù)字類型的參數(shù),我們將它放在 Vue 組件的 props 中:
props: {
number: {
type: Number,
default: 0
}
}補位
因為我們的業(yè)務(wù)需要,我們最大的位數(shù)是 8 位數(shù)字,所以定義一個常量:
const MAX_LEN = 8
假如傳遞的位數(shù)不足 8 位,我們需要對它進行補 0 的操作,補 0 完成以后,我們也需要把它轉(zhuǎn)換成金額的格式
由于此部分代碼較常見,為節(jié)省篇幅,就不展示代碼,可自行書寫相關(guān)js代碼。
渲染
我們根據(jù)上面補位字符串,分隔成字符數(shù)組,在頁面中進行渲染:
computeNumber:為字符數(shù)組,例如:['0','0',',','0','0','0',',','9','1','7']
html 部分代碼:
css 部分代碼:
.number-item {
width: 50px;
background: url(./number-bg.png) no-repeat center center;
background-size:100% 100%;
& > span {
position: relative;
display: inline-block;
margin-right: 10px;
width: 100%;
height: 100%;
writing-mode: vertical-rl;
text-orientation: upright;
overflow: hidden;
& > i {
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%,0);
transition: transform 0.5s ease-in-out;
letter-spacing: 10px;
}
}
}頁面渲染效果:
數(shù)字隨機增長,模擬輪詢效果
頁面渲染完畢后,我們來讓數(shù)字滾動起來,設(shè)計如下兩個方法,其中 increaseNumber 需要在 Vue 生命周期 mounted 函數(shù)中調(diào)用
// 定時增長數(shù)字
increaseNumber () {
let self = this
this.timer = setInterval(() => {
self.newNumber = self.newNumber + getRandomNumber(1, 100)
self.setNumberTransform()
}, 3000)
},
// 設(shè)置每一位數(shù)字的偏移
setNumberTransform () {
let numberItems = this.$refs.numberItem
let numberArr = this.computeNumber.filter(item => !isNaN(item))
for (let index = 0; index < numberItems.length; index++) {
let elem = numberItems[index]
elem.style.transform = `translate(-50%, -${numberArr[index] * 10}%)`
}
}最終實現(xiàn)效果:

以上是“web開發(fā)中如何實現(xiàn)大屏數(shù)字滾動效果”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!