mobile.html 22.2 KB
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <meta charset="UTF-8">
    <title>畅移2020年度庆典</title>
    <script>
        (function (doc, win) {
            var docEl = doc.documentElement,
                dpr = 1,
                scale = 1 / dpr;
            var metaEl = doc.createElement('meta');
            metaEl.name = "viewport";
            metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ',minimum-scale=' + scale;
            docEl.firstElementChild.appendChild(metaEl);
            var recalc = function () {
                var deviceWidth = docEl.clientWidth;
                if (deviceWidth > 750) deviceWidth = 750;
                docEl.style.fontSize = deviceWidth / 7.5 + 'px';
            };
            recalc();
        })(document, window);
    </script>
    <style>
        * {padding: 0;margin: 0;}
        html, body {padding: 0;margin: 0;min-height:100%;font-family: 'PingFangSC','PingFang','Microsoft Yahei','Hiragino Sans GB','WenQuanYi Micro Hei','Droidsansfallback','Droid Sans',STHeiti,'\534E\6587\7EC6\9ED1','Helvetica Neue',SimHei,Helvetica,Arial,sans-serif;}
        img {display: block;}
        input {outline: none;border: none;-webkit-appearance: none;}
        .wrap {position: relative;width: 100%;min-height: 100%;box-sizing: border-box;-webkit-overflow-scrolling: touch;}
        .sign-in, .pic, .home, .seat {user-select: none;-webkit-user-select: none;-moz-user-select: none;}
        .common-btn {position: relative;width: 5.9rem;height: 1.08rem;margin: 0 auto;}
        .common-btn:not(:first-of-type) {margin-top: .4rem;}
        .common-btn-bg {display: inline-block;width: 6.82rem;margin-left: -.46rem;margin-top: -.5rem;}
        .common-btn-inner {position: absolute;top: 0;left: 0;z-index: 1;width: 100%;height: 100%;}
        input::-webkit-input-placeholder {color: #B8BCBD;}
        input:-moz-placeholder {color: #B8BCBD;}
        input::-moz-placeholder {color: #B8BCBD;}
        input::-ms-input-placeholder {color: #B8BCBD;}
        .sign-in {height: 100vh;background: url('./img/mobile/signin_bg.png') no-repeat;background-size: 100% 100%;}
        .sign-in-logo {position: absolute;top: .3rem;left: .3rem;width: 1.46rem;height: .5rem;background: url('./img/mobile/signin_logo.png') no-repeat;background-size: 100%;}
        .sign-in-title {width: 90.67%;height: 4.26rem;margin: -.1rem auto 0;background: url('./img/mobile/signin_title.png') no-repeat;background-size: 100%;}
        .sign-input {
            display: block;
            width: 5.8rem;
            height: 1rem;
            margin: .5rem auto .6rem;
            background: #fff;
            box-sizing: border-box;
            padding: .28rem .2rem;
            border: 1px solid #FFE9CC;
            -webkit-box-shadow: 0 .04rem .24rem .04rem #D97711, inset 0 0 .16rem 0 #D7BDA3;
            -moz-box-shadow: 0 .04rem .24rem .04rem #D97711, inset 0 0 .16rem 0 #D7BDA3;
            box-shadow: 0 .04rem .24rem .04rem #D97711, inset 0 0 .16rem 0 #D7BDA3;
            border-radius: .5rem;
            line-height: .44rem;
            text-align: center;
            font-size: .32rem;
        }

        .pic {height: 100vh;padding-top: 1.28rem;background: url('./img/mobile/pic_bg.png') no-repeat;background-size: 100% 100%;}
        .pic-title {width: 5.1rem;margin: 0 auto;}
        .pic-img-wrap {position: relative;width: 4.78rem;height: 4.78rem;margin: .5rem auto 0;box-sizing: border-box;padding: .96rem .92rem .98rem 1.02rem;}
        .pic-img-bg {position: absolute;top: 0;left: 0;z-index: 1;width: 100%;height: 100%;background: url('./img/mobile/pic_avatar_bg.png') no-repeat;background-size: 100% 100%;}
        .pic-avatar-wrap {width: 2.84rem;height: 2.84rem;border-radius: 50%;overflow: hidden;}
        .pic-avatar {width: 2.84rem;}
        .pic-btn-wrap {position: absolute;bottom: 1.2rem;left: 50%;transform: translateX(-50%);width: 6.82rem;padding-bottom: .72rem;}
        .pic-btn-album {position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 3rem;display: flex;align-items: center;justify-content: center;}
        .pic-btn-album .album-text {font-size: .28rem;color: #fff;margin-right: .1rem;}
        .pic-btn-album .pic-arrow {width: .32rem;height: .32rem;background: url('./img/mobile/pic_arrow.png') no-repeat;background-size: 100% 100%;}

        .home {padding-bottom: 3rem; background: url('./img/mobile/home_bg.png') no-repeat;background-size: cover;}
        .user-info {position: relative;padding-top: 1.16rem;}
        .info-bg {width: 100%;height: 3.26rem;background: url('./img/mobile/home_info_bg.png') no-repeat center bottom;background-size: 100% 100%;}
        .info-lantern {position: absolute;top: 0;right: 0;width: 100%;height: 2.72rem;background: url('./img/mobile/home_lantern.png') no-repeat;background-size: 100%;}
        .info-center {position: absolute;top: .4rem;left: 50%;transform: translateX(-50%);}
        .user-avatar {position: relative;width: 1.34rem;height: 1.4rem;box-sizing: border-box;padding-top: .24rem;padding-left: .18rem;margin: 0 auto;overflow: hidden;}
        .user-avatar .avatar-img-wrap {width: 1.14rem;height: 1.14rem;border-radius: 50%;overflow: hidden;}
        .user-avatar .avatar-img {width: 1.14rem;}
        .user-avatar .avatar-border {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url('./img/mobile/home_avatar.png') no-repeat;background-size: 100% 100%;}
        .info-center .user-name {text-align: center;font-size: .36rem;font-weight: 500;color: #C93120;margin-top: .1rem;}
        .info-main {position: absolute;bottom: .8rem;left: 50%;transform: translateX(-50%); width: 6.3rem; height: .82rem;display: flex;align-items: center;}
        .info-main-item {position: relative;flex: 1;-webkit-flex: 1;text-align: center;}
        .info-main-item .item-content {font-size: .32rem;font-weight: 600;color: #C93120;margin-bottom: .04rem;}
        .info-main-item .item-label {font-size: .24rem;font-weight: 400;color: #631810;}
        .enter-btn {position: absolute; top: -.48rem;right: .4rem;width: 1.18rem;height: .48rem;background: url('./img/mobile/home_enter.png') no-repeat;background-size: 100% 100%;}
        .info-main-space {width: .02rem;height: .6rem;background: rgba(208, 162, 82, .2);}
        .home-title {width: 5.64rem;height: 1.46rem;margin: .2rem auto 0;background: url('./img/mobile/home_title.png') no-repeat;background-size: 100%;}
        .home-list {width: 100%;height: 21.82rem;margin-top: -.2rem;background: url('./img/mobile/home_program.png') no-repeat;background-size: 100%;}
        .home-vote-btn {position: fixed;bottom: 1.6rem;left: 50%;transform: translateX(-50%);z-index: 1;width: 3.2rem;height: .9rem;}
        .home-vote-btn .btn-bg {width: 4.06rem;height: 2rem;margin-left: -.46rem;margin-top: -.5rem;}
        .home-vote-inner {position: absolute;top: 0;left: 0;width: 100%;height: 100%;}
        .home-barrage-wrap {position: fixed;bottom: 0;left: 0;right: 0;z-index: 1;display: flex;height: 1.08rem;background: #fff;}
        .barrage-input {width: 70.67%;height: 1.08rem;box-sizing: border-box;border: none;border-radius: 0;background: #fff;padding: .3rem .4rem;line-height: .48rem;font-size: .32rem;}
        .send-btn {width: 29.33%;height: 1.08rem;line-height: 1.08rem;text-align: center;font-size: .32rem;color: #fff;background: url('./img/mobile/home_btn_gray.png') no-repeat;background-size: 100% 100%;}
        .send-btn.active {background: url('./img/mobile/home_btn_active.png') no-repeat;background-size: 100% 100%;}

        .seat {min-height: 100vh;background: #F8F8F9;padding-top: .4rem;}
        .stage {width: 6.3rem;height: 2.14rem;margin: 0 auto; background: #FFF8DD; box-sizing: border-box;border: 1px dashed rgba(255, 205, 0, .5);border-top: .16rem solid #FBCE07;font-size: .32rem;font-weight: 500;color: #FBCE07;display: flex;align-items: center;justify-content: center;}
        .entrance {width: .4rem;height: .6rem;margin-top: .5rem;padding: .1rem;background: #E6F7EF;border: 1px dashed #64DCA1;border-left: none;font-size: .28rem;font-weight: 500;color: #64DCA1;display: flex;align-items: center;justify-content: center;}
        .seat-list {padding: 0 .6rem;margin-top: .14rem;}
        .seat-list .list-item {position: relative;float: left;width: 1.24rem;height: 1.24rem;margin-right: .02rem;margin-bottom: .16rem;border-radius: 50%;}
        .seat-list .list-item.active {background: url('./img/mobile/seat_active.png') no-repeat;background-size: 100% 100%;}
        .seat-list .list-item:nth-child(5n) {margin-right: 0;}
        .seat-list .list-item-inner {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 1rem;height: 1rem;border-radius: 50%;background: #EDEDED;line-height: 1rem;text-align: center;font-size: .4rem;color: #ccc;font-family: DINAlternate-Bold,DINAlternate;font-weight: bold;}
        .seat-icon {position: absolute;right: -.38rem;top: -.52rem;width: .76rem;height: .76rem;background: url('./img/mobile/icon_seat.png') no-repeat;background-size: 100% 100%;}
        .seat-list .list-item.active .list-item-inner {background: transparent;color: #fff;}
        .bottom-btn {position: fixed;bottom: 0;left: 0;z-index: 1;width: 100%;height: 1.08rem;background: url('./img/mobile/btn_bg_red.png') no-repeat;background-size: 100% 100%;line-height: 1.08rem;text-align: center;font-size: .32rem;color: #fff;}

        .vote {min-height: 100vh;padding-bottom: 1.2rem;}
        .vote .tip {width: 100%;height: .84rem;background: #FFE7E4;line-height: .84rem;text-align: center;font-size: .28rem;font-weight: 600;color: #D02E1D;}
        .program-title {margin-top: .3rem;padding-left: .4rem;font-size: .28rem;color: #A6A6A6;}
        .program-list {padding-left: .4rem;}
        .program-item {padding: .4rem 0;display: flex;align-items: center;}
        .program-item:not(:last-of-type) {border-bottom: 1px solid #F7F7F7;}
        .program-item-icon {width: .44rem;height: .44rem;box-sizing: border-box;border: 1px solid rgba(201, 49, 32, .5);border-radius: 50%;}
        .program-item-label {flex: 1;-webkit-flex: 1;max-width: 6rem;overflow: hidden;word-break: break-all;font-size: .3rem;color: #000;margin-left: .22rem;}
        .program-item.active .program-item-icon {background: url('./img/mobile/vote_active.png') no-repeat;background-size: 100% 100%;border: none;}

        .dialog-wrap {position: fixed;z-index: 10;left: 0;right: 0;top: 0;bottom: 0;background: rgba(0,0,0,.5);}
        .dialog-main {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 100%;height: 9.36rem;box-sizing: border-box;padding-top: 3.2rem;background: url('./img/mobile/dialog_bg.png') no-repeat;background-size: 100% 100%;}
        .dialog-title {width: 3.7rem;margin: 0 auto;display: flex;align-items: center;justify-content: space-between;}
        .title-icon-left, .title-icon-right {width: .9rem;height: .2rem;}
        .title-icon-left {background: url('./img/mobile/dialog_title1.png') no-repeat;background-size: 100% 100%;}
        .title-icon-right {background: url('./img/mobile/dialog_title2.png') no-repeat;background-size: 100% 100%;}
        .title-text {font-size: .32rem;font-weight: 600;color: #C93120;}
        .dialog-content {width: 5rem;margin: .4rem auto 0;padding: .2rem;line-height: .46rem;font-size: .28rem;color: #C93120;}
        .content-row {text-align: center;}
        .dialog-btn-single {width: 4.3rem;height: .94rem;margin: 1rem auto 0;background: url('./img/mobile/dialog_btn_bg.png') no-repeat;background-size: 100% 100%;line-height: .94rem;text-align: center; font-size: .32rem;color: #FBDB97;}
        .dialog-btn-wrap {width: 4.62rem;margin: 1rem auto;display: flex;justify-content: space-between;}
        .dialog-btn-item {width: 2.12rem;height: .94rem;line-height: .94rem;text-align: center; font-size: .32rem;}
        .dialog-theme-btn {background: url('./img/mobile/dialog_btn_confirm.png') no-repeat;background-size: 100% 100%;color: #FBDB97;}
        .dialog-reverse-btn {background: url('./img/mobile/dialog_btn_cancel.png') no-repeat;background-size: 100% 100%;color: #CF3727;}
        .dialog-close {position: absolute;top: -.6rem;right: .26rem;width: .76rem;height: .76rem;background: url('./img/mobile/dialog_close.png') no-repeat;background-size: 100% 100%;}

        .no-auth {width: 100%;height: 100vh;display: flex;flex-direction: column;justify-content: center;align-items: center;font-size: .32rem;color: #000;}
        .no-auth-icon {width: 3rem;margin-bottom: .3rem;}
        .no-auth-text {padding-bottom: 2rem;}
        .toast-tip {display: none;position: fixed;bottom: 50%;left: 50%;transform: translateX(-50%);z-index: 11;opacity: 0;padding: 0 .5rem;height: .84rem;background: rgba(0, 0, 0, .8);border-radius: .06rem;transition: opacity 1s ease-out;line-height: .84rem;text-align: center;font-size: .28rem;color: #fff;}
        .clearfix:after {content: " ";display: block;height: 0;visibility: hidden;clear: both;}
        .hide {display: none;}
    </style>
</head>
<body>
    <!--签到-->
    <div class="sign-in wrap hide" id="signIn">
        <div class="sign-in-logo"></div>
        <div class="sign-in-title"></div>
        <input class="sign-input" type="text" placeholder="请输入你的姓名" maxlength="15" onblur="action.resetPosition()">
        <div class="common-btn">
            <img class="common-btn-bg" src="./img/mobile/signin_btn.png">
            <div class="common-btn-inner" onclick="action.signIn()"></div>
        </div>
    </div>

    <!--拍照-->
    <div class="pic wrap hide" id="pic">
        <img class="pic-title" src="./img/mobile/pic_text1.png">
        <img class="pic-title hide" src="./img/mobile/pic_text2.png">
        <div class="pic-img-wrap" onclick="action.openCamera()">
            <div class="pic-avatar-wrap">
                <img class="pic-avatar" src="./img/mobile/default_avatar.png">
            </div>
            <div class="pic-img-bg"></div>
        </div>
        <div class="pic-btn-wrap" id="upload_unavailable">
            <!-- 自拍出境 -->
            <div class="common-btn">
                <img class="common-btn-bg" src="./img/mobile/pic_btn1.png">
                <div class="common-btn-inner" onclick="action.openCamera(1)"></div>
            </div>
            <div class="pic-btn-album" onclick="action.openCamera(2)">
                <span class="album-text">还是相册选一张吧</span>
                <i class="pic-arrow"></i>
            </div>
        </div>
        <div class="pic-btn-wrap hide" id="upload_available">
            <!-- 完美提交 -->
            <div class="common-btn">
                <img class="common-btn-bg" src="./img/mobile/pic_btn2.png">
                <div class="common-btn-inner" onclick="action.uploadImage()"></div>
            </div>
            <!-- 再拍一次 -->
            <div class="common-btn">
                <img class="common-btn-bg" src="./img/mobile/pic_btn3.png">
                <div class="common-btn-inner" onclick="action.openCamera(1)"></div>
            </div>
            <div class="pic-btn-album" onclick="action.openCamera(2)">
                <span class="album-text">再翻翻相册吧</span>
                <i class="pic-arrow"></i>
            </div>
        </div>
    </div>

    <!-- 首页 -->
    <div class="home wrap hide" id="home">
        <div class="user-info">
            <div class="info-bg"></div>
            <div class="info-lantern"></div>
            <div class="info-center">
                <div class="user-avatar">
                    <div class="avatar-img-wrap">
                        <img class="avatar-img" id="home_user_avatar" src="./img/mobile/default_avatar.png">
                    </div>
                    <div class="avatar-border"></div>
                </div>
                <div class="user-name" id="home_user_name">姓名</div>
            </div>
            <div class="info-main">
                <div class="info-main-item">
                    <div class="item-content" id="home_prize_no"></div>
                    <div class="item-label">奖号</div>
                </div>
                <i class="info-main-space"></i>
                <div class="info-main-item">
                    <div class="item-content"><span id="home_table_no">0</span></div>
                    <div class="item-label">入座区域</div>
                    <div class="enter-btn" onclick="action.goSeat()"></div>
                </div>
            </div>
        </div>
        <div class="home-title"></div>
        <div class="home-list"></div>
        <div class="home-vote-btn">
            <img class="btn-bg" src="./img/mobile/home_vote_btn.png">
            <div class="home-vote-inner" onclick="action.getVoteState()"></div>
        </div>
        <div class="home-barrage-wrap">
            <input class="barrage-input"
                   type="text"
                   placeholder="发条弹幕试试"
                   maxlength="50"
                   oninput="action.toggleBtnState()"
                   onblur="action.resetPosition()">
            <div class="send-btn">发送</div>
        </div>
    </div>

    <!-- 查看座位 -->
    <div class="seat wrap hide">
        <div class="stage">舞台</div>
        <div class="entrance">入口</div>
        <div class="seat-list clearfix"></div>
        <div class="bottom-btn" onclick="action.goHome()">返回</div>
    </div>

    <!-- 投票 -->
    <div class="vote wrap hide">
        <div class="tip hide">最多可以票选5个优秀节目!</div>
        <div class="program-title">选项(多选)</div>
        <ul class="program-list"></ul>
        <div class="bottom-btn" onclick="action.vote()">确认投票</div>
    </div>

    <!-- 暂未开启签到 弹框 -->
    <div class="dialog-wrap hide" id="stop_sign_dialog">
        <div class="dialog-main">
            <div class="dialog-title">
                <i class="title-icon-left"></i>
                <div class="title-text">温馨提示</div>
                <i class="title-icon-right"></i>
            </div>
            <div class="dialog-content">
                <p class="content-row">年会签到通道暂未开启</p>
            </div>
            <div class="dialog-btn-single" onclick="action.switchDialog('#stop_sign_dialog', false)">我知道了</div>
        </div>
    </div>

    <!-- 姓名不存在 弹框 -->
    <div class="dialog-wrap hide" id="sign_in_dialog">
        <div class="dialog-main">
            <div class="dialog-close" onclick="action.switchDialog('#sign_in_dialog', false)"></div>
            <div class="dialog-title">
                <i class="title-icon-left"></i>
                <div class="title-text">温馨提示</div>
                <i class="title-icon-right"></i>
            </div>
            <div class="dialog-content">
                <p class="content-row">纳尼?您的姓名竟然不存在!</p>
                <p class="content-row">快老实交代,你是卧底还是走丢了!</p>
            </div>
            <div class="dialog-btn-single" onclick="action.switchDialog('#sign_in_dialog', false)">速速联系组委会</div>
        </div>
    </div>

    <!-- 未开启投票 弹框 -->
    <div class="dialog-wrap hide" id="home_dialog">
        <div class="dialog-main">
            <div class="dialog-title">
                <i class="title-icon-left"></i>
                <div class="title-text">温馨提示</div>
                <i class="title-icon-right"></i>
            </div>
            <div class="dialog-content">
                <p class="content-row">投票还没开始,还是专心看节目吧~</p>
            </div>
            <div class="dialog-btn-single" onclick="action.switchDialog('#home_dialog', false)">我知道了</div>
        </div>
    </div>

    <!-- 投票确认 弹框 -->
    <div class="dialog-wrap hide" id="vote_dialog">
        <div class="dialog-main">
            <div class="dialog-title">
                <i class="title-icon-left"></i>
                <div class="title-text">温馨提示</div>
                <i class="title-icon-right"></i>
            </div>
            <div class="dialog-content">
                <p class="content-row">投票完成就不能反悔了,</p>
                <p class="content-row">确认投票吗?</p>
            </div>
            <div class="dialog-btn-wrap">
                <div class="dialog-btn-item dialog-reverse-btn" onclick="action.switchDialog('#vote_dialog', false)">取消</div>
                <div class="dialog-btn-item dialog-theme-btn" onclick="action.submitVote()">确认</div>
            </div>
        </div>
    </div>

    <!-- 非微信浏览器打开 -->
    <div class="no-auth hide">
        <img class="no-auth-icon" src="./img/mobile/no_auth.png">
        <span class="no-auth-text">请在微信中使用</span>
    </div>

    <script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.js"></script>
    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
    <script src="https://cdn.bootcss.com/jquery/1.7.2/jquery.min.js"></script>
    <script src="//cdn.bootcss.com/socket.io/2.0.3/socket.io.js"></script>
    <script src="https://cdn.bootcss.com/vConsole/3.2.0/vconsole.min.js"></script>
    <script src="./js/template.js"></script>
    <script src="mobile.js?t=2"></script>
    <script>
        var ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == 'micromessenger') {
            var vConsole = new VConsole();
            action.init();
        } else {
            $('.wrap, .dialog-wrap').hide();
            $('.no-auth').css('display', 'flex');
        }
    </script>

    <script type="text/html" id="seatListTmpl">
        {{each list as item}}
            <div class="list-item {{if item.number == userSeat}}active{{/if}}">
                <div class="list-item-inner">{{item.number}}</div>
                {{if item.number == userSeat}}
                <i class="seat-icon"></i>
                {{/if}}
            </div>
        {{/each}}
    </script>

    <script type="text/html" id="programListTmpl">
        {{each list as item index}}
            <li class="program-item {{if item.checked}}active{{/if}}" onclick="action.selectProgram({{index}})">
                <i class="program-item-icon"></i>
                <span class="program-item-label">{{item.item_name}}</span>
            </li>
        {{/each}}
    </script>
</body>
</html>