一个翻牌抽奖的前端demo

773 阅读1分钟

一个用于抽奖的翻牌demo,从react改版成原生代码,有兴趣的小伙伴可以参考参考, 直接上代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .card-wrapper{
            width: 640px;
            height: 350px;
            position: absolute;
            top: 70px;
            left: calc( 50% - 320px);
            padding: 10px 15px 0;
        }
        .card-list{
            width: 100%;
            height: 242px;
            perspective:1000;
            perspective-origin: center center;
            -webkit-perspective:1000;	/* Safari 和 Chrome */
            -webkit-perspective-origin:  center center;	/* Safari 和 Chrome */
            transform-style: preserve-3d;
            position: relative;
        }
        .card-list-item{
            width: 192px;
            height: 242px;
            transform-style: preserve-3d;
            overflow: hidden;
               
        }
        .card-list-item-wrapper{
            width: 100%;
            height: 100%;
            position: relative;
        }
        .card-list-item-back,.card-list-item-front{
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-repeat: no-repeat;
            background-size: 100% 100%;
            -webkit-backface-visibility: hidden;
            -moz-backface-visibility: hidden;
            -o-backface-visibility: hidden;
            -ms-backface-visibility: hidden;
            backface-visibility: hidden;
            -webkit-transform-style: preserve-3d;
            -moz-transform-style: preserve-3d;
            -o-transform-style: preserve-3d;
            -ms-transform-style: preserve-3d;
            transform-style: preserve-3d;
        }
        .card-list-item-back{
            background-image: url('./cardBack.png');
            transform: rotateY(0deg);
            transition: all .8s cubic-bezier(0.68,-.55,.265,1.55);
            overflow: hidden;
            position: relative;
        }
        .card-list-item-back-text{
            width: 132px;
            height: 38px;
            background: #C92400;
            opacity: 0.65;
            border-radius: 19px;
            display: flex;
            align-items: center;
            justify-content: center;
            position: absolute;
            top: 162px;
            left: 30px;
            font-size: 24px;
            font-weight: 400;
            color: #FFE6DF;
        }
        .card-list-item-front{
            background-image: url('./cardFront.png');
            font-size: 36px;
            font-weight: 600;
            color: #B82B0B;
            display: flex;
            justify-content: center;
            align-items: center;
            text-align: center;
            transform: rotateY(180deg);
            transition: all .8s cubic-bezier(0.68,-.55,.265,1.55);
            overflow: hidden;
        }
        .card-list-item-back.choosed{
            transform: rotateY(180deg);
        }
        .card-list-item-front.choosed{
            transform: rotateY(0deg);
        }
        .card1{
            position: absolute;
            top: 4px;
            left: 0;
        }
        .card2{
            position: absolute;
            top: 4px;;
            left: 205px;
        }
        .card3{
            position: absolute;
            top: 4px;
            left: 410px;
        }
        .move1{
            animation:move1 1s ease-in-out 3;
        }
        .move2{
            animation:move2 1s ease-in-out 3;
        }
        .move3{
            animation:move3 1s ease-in-out 3;
        }
        @keyframes move1{
            0%   {left:0px; top: 4px;z-index: 9;transform: scale(1);}
            50%  {left:253px; top: 2px;z-index: 99;transform: scale(1.04);}
            100% {left:0px; top: 4px;z-index: 9;transform: scale(1);}
        }
        @keyframes move2{
            0%   {left:205px;top: 4px;z-index: 9;transform: scale(1);}
            25%  {left:230px;top: 6px;z-index: 5;transform: scale(1.03);}
            50%  {left:205px;top: 4px;z-index: 9;transform: scale(1.03);}
            75%  {left:180px;top: 6px;z-index: 5;transform: scale(1.03);}
            100% {left:205px;top: 4px;z-index: 9;transform: scale(1);}
        }
        @keyframes move3{
            0%   {left:410px;top: 4px;z-index: 9;z-index: 9;transform: scale(1);}
            50%  {left:157px;top: 2px;z-index: 99;z-index: 999;transform: scale(1.04);}
            100% {left:410px;top: 4px;z-index: 9;z-index: 9;transform: scale(1);}
        }
        @keyframes lighter {
            0%   {font-size: 24px;font-weight: 400;color: #FFE6DF;}
            50%  {font-size: 25px;font-weight: 500;color: #fcfaf9;}
            100% {font-size: 24px;font-weight: 400;color: #FFE6DF;}
        }
        .card-text-ani{
            animation:lighter 0.75s ease-in-out infinite;
        }
        .prize-notice {
            width: 450px;
            height: 48px;
            background: #C8ECFF;
            border-radius: 24px;
            line-height: 48px;
            position: absolute;
            top: 280px;
            right: calc(50% - 225px) ;
            align-items: center;
            overflow: hidden;
            display: flex;
            justify-content: flex-start;
            align-items: center;
            padding-left: 35px;
        }
        .prize-notice-img{
            width: 26px;
            height: 23px;
            margin-right: 19px;
        }
        .slider-frame{
        height: 48px!important;
        line-height: 48px!important;
        }
        .my-carousel .v-item {
            width: 370px;
            height: 100%;
            font-size: 26px;
            display: flex;
            font-weight: normal;
            justify-content: flex-start;
            align-items: center;
            box-sizing: border-box;
            margin-left: 0;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
        }
    </style>
    
<script>
        function getAward(index){
            console.log(index)
            let frontDom = document.getElementsByClassName("card-list-item-front")[index-1];
            let backDom = document.getElementsByClassName("card-list-item-back")[index-1];
            frontDom.setAttribute("class","card-list-item-front choosed");
            backDom.setAttribute("class","card-list-item-back choosed");
        }
    </script>
    </head>
<body>
    <div class="card-wrapper">
        <div class="card-list">
            <div class="card-list-item card1 move1">
                <div class="card-list-item-wrapper" onClick={getAward(1)}>
                    <div class="card-list-item-front " ></div>
                    <div class="card-list-item-back">
                        <div class="card-list-item-back-text">点我翻牌</div>
                    </div>
                </div>
            </div>
            <div class="card-list-item card2 move2">
                <div class="card-list-item-wrapper" onClick={getAward(2)}>
                    <div class="card-list-item-front"></div>
                    <div class="card-list-item-back">
                        <div class="card-list-item-back-text">点我翻牌</div>
                    </div>
                </div>
            </div>
            <div class="card-list-item card3 move3">
                <div class="card-list-item-wrapper" onClick={getAward(3)}>
                    <div class="card-list-item-front"></div>
                    <div class="card-list-item-back">
                        <div class="card-list-item-back-text">点我翻牌</div>
                    </div>
                </div>
            </div>
        </div>
</body>
</html>

图片就不提供了,自己找个图片换一下吧~