您好,登錄后才能下訂單哦!
這篇“vue3.0翻牌數字組件怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue3.0翻牌數字組件怎么使用”文章吧。
效果:
代碼:
<template> <div class="number-count-wrap" :class="numberSize"> <!-- 標題 start --> <div class="number-title" :>{{title}}</div> <!-- 標題 end --> <div class="number-count" :class="numberAlign"> <!-- 計數器 start --> <ul class="number-content"> <template v-for="(item,index) in orderNum" :key="index"> <li class="number-item" v-if="!isNaN(item)"> <span> <ul class="number-list" :ref="numberItem"> <li>0</li> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> </ul> </span> </li> <li class="separator" v-else> {{item}} </li> </template> </ul> <!-- 計數器 end --> <!-- 單位 start --> <div class="number-unit" v-if="unit">{{unit}}</div> <!-- 單位 end --> </div> </div> </template> <script> import { onMounted, watch, ref, reactive, toRefs } from 'vue' export default { name: "numberCount", props: { numberSize: { // 字號大小 middle 中號 small 小號 type: String, default: '' }, title: { // 標題 type: String, default: "" }, titleAlign: { // 標題對齊方式 type: String, default: '' }, numberAlign: { //數字對齊方式 type: String, // center 居中對齊 default: '' }, unit: { // 單位 type: String, default: "" }, countNum: { // 數值 type: Number, }, initDelay: { // 首次加載延時 type: Number, } }, setup(props) { const numberItemList = ref([]); const numberItem = (el) => { numberItemList.value.push(el); }; var locarCountNum = props.countNum.toLocaleString() locarCountNum = locarCountNum.split('') const data = reactive({ orderNum: locarCountNum, // 默認訂單總數 }); watch(props, (nval, oval) => { if (nval) { toOrderNum(nval.countNum) } }) onMounted(() => { setTimeout(() => { toOrderNum(props.countNum) // 這里輸入數字即可調用 }, props.initDelay); }) function setNumberTransform () { const numberItems = numberItemList.value // 拿到數字的ref,計算元素數量 const numberArr = data.orderNum.filter(item => !isNaN(item)) // 結合CSS 對數字字符進行滾動,顯示訂單數量 for (let index = 0; index < numberItems.length; index++) { const elem = numberItems[index] elem.style.transform = `translate(0%, -${numberArr[index] * 10}%)` } } // 處理總訂單數字 function toOrderNum(num) { // console.log('num',num) // num = num.toString() // 把訂單數變成字符串 // if (num.length < 7) { // num = '0' + num // 如未滿八位數,添加"0"補位 // toOrderNum(num) // 遞歸添加"0"補位 // } else if (num.length === 7) { // // 訂單數中加入逗號 // // num = num.slice(0, 2) + ',' + num.slice(2, 5) + ',' + num.slice(5, 8) // data.orderNum = num.split('') // 將其便變成數據,渲染至滾動數組 // } else { // // 訂單總量數字超過八位顯示異常 // // _this.$message.warning('總量數字過大') // } setNumberTransform() } return { setNumberTransform, toOrderNum, numberItem, ...toRefs(data) } } }; </script> <style scoped lang="less"> .number-count-wrap { .number-title { font-size: .18rem; color: #FFFFFF; line-height: 1; margin-bottom: .15rem; font-weight: bold; } .number-count { display: flex; justify-content: flex-start; align-items: flex-end; .number-content { display: flex; justify-content: flex-start; align-items: center; /*文字禁止編輯*/ -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit瀏覽器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期瀏覽器*/ user-select: none; .number-item { width: 0.32rem; // height: 1.8rem; display: flex; justify-content: center; align-items: center; margin: 0 0.02rem; &>span { position: relative; display: inline-block; width: 100%; height: 0.4rem; overflow: hidden; background: linear-gradient(180deg, #2167D0 0%, #164D8F 100%); box-shadow: 0 .04rem 0 0 #176ED6; border-radius: .06rem; border: 1px solid white; padding-bottom: .04rem; box-sizing: border-box; .number-list{ transition: transform 1s ease-in-out; text-align: center; font-weight: 600; li { height: 0.4rem; display: flex; justify-content: center; align-items: center; font-size: .3rem; font-weight:400; color: white; padding-bottom: .04rem; box-sizing: border-box; } } } } .separator { font-size: .3rem; font-weight: normal; color: #FFFFFF; line-height: 1; margin: 0 0.025rem; } } .number-unit { margin-left: .1rem; font-size: .18rem; font-weight: normal; color: #B1B7BC; } } .center { justify-content: center; } } // middle start .middle { .number-title { font-size: .12rem; margin-bottom: .10rem; } .number-count { .number-content { .number-item { width: 0.2rem; margin: 0 0.0175rem; &>span { height: 0.25rem; box-shadow: 0 .025rem 0 0 #176ED6; border-radius: .04rem; padding-bottom: .025rem; .number-list{ li { height: 0.25rem; font-size: .2rem; font-weight:400; color: white; box-sizing: border-box; } } } } .separator { font-size: .2rem; margin: 0 0.025rem; } } .number-unit { margin-left: .06rem; font-size: .12rem; } } } // middle end </style>
以上就是關于“vue3.0翻牌數字組件怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。