91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue怎么實現翻牌動畫

發布時間:2022-04-20 13:42:26 來源:億速云 閱讀:325 作者:iii 欄目:開發技術

本篇內容主要講解“vue怎么實現翻牌動畫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“vue怎么實現翻牌動畫”吧!

vue怎么實現翻牌動畫

應用場景

常用于大屏訂單數量展示

原理

  • 利用css writing-mode: vertical-rl 使數字垂直排列

  • 利用css transform 使數字滾動

實現思路

  • 根據css先讓數字垂直排列,總共設置8列

  • 根據組件傳遞的數值,如果不滿8位,遞歸補零

  • 補零之后,循環根據 translate(-50%, -${numberArr[index] * 10}%,查看動畫

<template>
    <div class="chartNum">
        <div class="box-item">
            <li
                :class="{'number-item':!isNaN(item),'mark-item':!isNaN(item)}"
                v-for="(item,index) in orderNum"
                :key="index">
                <span v-if="!isNaN(item)">
                    <i ref="numberItem">0123456789</i>
                </span>
                <span class="comma" v-else>{{item}}</span>
            </li>
        </div>
    </div>
</template>

<script>
    export default {
        name: "hChartNum",
        props:{
          num:{
              type:Number,
              default:1123
          }
        },
        data() {
            return {
                orderNum: ['0', '0', '0', '0', '0', '0', '0', '0'], // 默認訂單總數
            }
        },
        mounted(){
            setTimeout(() => {
                this.toOrderNum(this.num) // 這里輸入數字即可調用
            }, 500);
        },
        methods:{
            // 設置文字滾動
            setNumberTransform(){
                const numberItems = this.$refs.numberItem // 拿到數字的ref,計算元素數量
                const numberArr = this.orderNum.filter(item => !isNaN(item))
                // 結合css,讓文字滾動起來
                for (let index = 0; index < numberItems.length; index++) {
                    const elem = numberItems[index];
                    elem.style.transform = `translate(-50%, -${numberArr[index] * 10}%)`
                }
            },


            // 處理訂單數字
            toOrderNum(num){
                num = num.toString();
                if(num.length < 8){
                    num = '0' + num; // 未滿8位,補零
                    this.toOrderNum(num); // 遞歸添加"0"補位
                }
                else if(num.length == 8){
                    this.orderNum = num.split('')
                }
                else{
                    // 數據量超過8位
                    this.$message.error('數據量過大');
                }
                this.setNumberTransform();
            }
        }
    }
</script>

<style scoped lang="less">
    .box-item{
        position: relative;
        height: 100px;
        font-size: 54px;
        line-height: 41px;
        text-align: center;
        list-style: none;
        color: #2D7CFF;
        writing-mode: vertical-lr;
        text-orientation: upright;

        -moz-user-select: none;
        -webkit-user-select: none; /*webkit瀏覽器*/
        -ms-user-select: none; /*IE10*/
        -khtml-user-select: none; /*早期瀏覽器*/
        user-select: none;
    }

    /*默認逗號設置*/
    .number-item{
        width: 10px;
        height: 100px;
        margin-right: 5px;
        line-height: 10px;
        font-size: 48px;
        position: relative;
        & > span{
            position: absolute;
            width: 100%;
            bottom: 0;
            writing-mode: vertical-rl;
            text-orientation: upright;
          }
    }

    /*滾動數字設置*/
    .number-item {
        width: 41px;
        height: 75px;
        background: url(./img/bg.jpg) no-repeat center center;
        background-size: 100% 100%;
        list-style: none;
        margin-right: 5px;
        border-radius:4px;
        border:1px solid rgba(221,221,221,1);
        & > span{
            position: relative;
            display: inline-block;
            margin-right: 10px;
            width: 100%;
            height: 100%;
            writing-mode: vertical-rl;
            text-orientation: upright;
            overflow: hidden;
            & > i {
                font-style: normal;
                position: absolute;
                top:11px;
                left: 50%;
                transform: translate(-50%,0);
                transition: transform 1s ease-in-out;
                letter-spacing: 10px;
            }
        }
    }
    .number-item:last-child {
        margin-right: 0;
    }
</style>

到此,相信大家對“vue怎么實現翻牌動畫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

荔波县| 溆浦县| 西乌珠穆沁旗| 三门峡市| 来宾市| 湖南省| 乐清市| 托里县| 郴州市| 肃南| 武陟县| 海门市| 屯门区| 周宁县| 错那县| 柳林县| 峡江县| 山阳县| 页游| 金寨县| 鄢陵县| 潼南县| 碌曲县| 张家川| 文成县| 体育| 西和县| 紫阳县| 富民县| 甘孜县| 宜昌市| 滨海县| 南和县| 阳朔县| 诸暨市| 峨边| 资溪县| 哈密市| 罗源县| 西乡县| 左云县|