這篇文章主要講解了react不用插件實現(xiàn)數(shù)字滾動的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
創(chuàng)新互聯(lián)建站主要從事網頁設計、PC網站建設(電腦版網站建設)、wap網站建設(手機版網站建設)、成都響應式網站建設、程序開發(fā)、網站優(yōu)化、微網站、小程序設計等,憑借多年來在互聯(lián)網的打拼,我們在互聯(lián)網網站建設行業(yè)積累了豐富的做網站、網站制作、網站設計、網絡營銷經驗,集策劃、開發(fā)、設計、營銷、管理等多方位專業(yè)化運作于一體。
突然要實現(xiàn)個數(shù)字滾動效果,網上一搜,一大堆都是用組件的。我只是想實現(xiàn)個簡單的效果而已,決定還是自己搞搞吧。
先來看看效果吧
也不多說了,實現(xiàn)起來不難,但是有點細節(jié)問題需要自己好好琢磨一下
大概思路,
1.一開始為0,獲取第一次數(shù)據,記錄下來
2.和前一次數(shù)據進行對比
3.然后transform
4.最后收工
好了,附上代碼、
export default class Number extends React.Component { constructor(props) { super(props); this.state = { prev: "000000",//初始化6位數(shù) next: "000000", inits: 0, listAll: [[0],[0],[0],[0],[0],[0]], contrlAnimationWay: false } this.key1 = 0 } componentWillUnmount() { } componentDidMount() { setTimeout(()=>{ this.run() }) // this.setTimer() } // 獲取數(shù)據 getNumber() { let { inits } = this.state let random = Math.floor(Math.random() * (100000 - 1) + 1); let prev = this.addZero(inits, 6) let next = this.addZero(inits + 1235, 6) this.setState({ inits: inits + 1235 }) console.log(99, prev); console.log(99, next); this.getData(prev, next) } // 數(shù)字補零 addZero(num, n) { let len = num.toString().length; while (len < n) { num = "0" + num; len++; } return num; } // 對比數(shù)據前后變化 getData(prev, next) { let { listAll } = this.state listAll = []; let prevArray = prev.toString().split(""); let nextArray = next.toString().split(""); console.log(11, prevArray); console.log(22, nextArray); let listInit = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; for (let i = 0; i < prevArray.length; i++) { let prevNumber = parseInt(prevArray[i]); let nextNumber = parseInt(nextArray[i]); let start = -1; let end = -1; for (let j = 0; j < listInit.length; j++) { if (listInit[j] === prevNumber) { start = j; } if (start !== -1 && listInit[j] === nextNumber) { end = j; break; } } listAll.push(listInit.slice(start, end + 1)); console.log(listAll); } this.setState({ listAll }) } run() { this.getNumber() this.key1++ } setTimer() { setInterval(() => { setTimeout(()=>{ this.run() }, 0); }, 1000 * 4) } render() { let { listAll } = this.state; return{/* 數(shù)字滾動 */}} }{/* 數(shù)字end */}累計{ listAll.map((list, i) => { return}) }{ list.map((item, index) => { return{item}}) }人已參與
css
/* 數(shù)字滾動 */ .box-number { /* background: green; */ display: flex; flex-direction: row; justify-content: center; align-items: center; color: rgb(36, 35, 35); height: 100px } .list-wrap { height: 3rem; width: 3rem; text-align: center; overflow: hidden; margin: 0.1rem; border: 2px rgb(19, 19, 18) solid; border-radius: 2px; } .roll div { font-size: 2rem; line-height: 3rem; } .roll_1 { -webkit-animation: roll_1 2s forwards; /* Safari 與 Chrome */ } .roll_2 { -webkit-animation: roll_2 2s forwards; /* Safari 與 Chrome */ } .roll_3 { -webkit-animation: roll_3 2s forwards; /* Safari 與 Chrome */ } .roll_4 { -webkit-animation: roll_4 2s forwards; /* Safari 與 Chrome */ } .roll_5 { -webkit-animation: roll_5 2s forwards; /* Safari 與 Chrome */ } .roll_6 { -webkit-animation: roll_6 2s forwards; /* Safari 與 Chrome */ } .roll_7 { -webkit-animation: roll_7 2s forwards; /* Safari 與 Chrome */ } .roll_8 { -webkit-animation: roll_8 2s forwards; /* Safari 與 Chrome */ } /*省略roll_2——roll_8*/ .roll_9 { -webkit-animation: roll_9 2s forwards; /* Safari 與 Chrome */ } @-webkit-keyframes roll_1 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0, 0); } 100% { transform: translate3d(0, -3rem, 0); } } @-webkit-keyframes roll_2 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -6rem, 0); } } @-webkit-keyframes roll_3 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -9rem, 0); } } @-webkit-keyframes roll_4 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -12rem, 0); } } @-webkit-keyframes roll_5 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -15rem, 0); } } @-webkit-keyframes roll_6 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -18rem, 0); } } @-webkit-keyframes roll_7 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -21rem, 0); } } @-webkit-keyframes roll_8 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -24rem, 0); } } @-webkit-keyframes roll_9 /* Safari 與 Chrome */ { 0% { transform: translate3d(0, 0px, 0); } 100% { transform: translate3d(0, -27rem, 0); } }
看完上述內容,是不是對react不用插件實現(xiàn)數(shù)字滾動的方法有進一步的了解,如果還想學習更多內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。