vue練手項目——桌面時鍾


用vue實現一個簡單的網頁桌面時鍾,主要包括時鍾顯示、計時、暫停、重置等幾個功能。

效果圖如下,頁面剛進來的時候是一個時鍾,時鍾上顯示的時、分、秒為當前實際時間,點擊計時器按鈕后,頁面變成一個計時器,並且計時器按鈕被暫停與重置兩個按鈕替代,分別對計時器進行暫停和重置,若點擊時鍾按鈕會切換回時鍾界面。

 

 

 代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>時鍾</title>
    <style type="text/css">
        .clock {
            width: 400px;
            height: 180px;
            line-height: 180px;
            border: 10px solid #aaa;
            border-radius: 10px;
            margin: 120px auto;
            background: pink;
            text-align: center;
            position: relative;
            box-shadow: 0px 5px 20px rgba(0,0,0,.6);
        }
        .clock .text {
            font-size: 70px;
            font-weight: bold;
            color: rgba(0,0,0,.7);
        }
        .clock .btn {
            position: absolute;
            /*top: -66px;*/
            bottom: -66px;
            border: none;
            outline: none;
            width: 80px;
            height: 36px;
            border-radius: 4px;
            font-size: 16px;
            background: #aaa;
            cursor: pointer;
            box-shadow: 0px 5px 20px rgba(0,0,0,.6);
        }
        .clock .btn:hover {
            opacity: 0.8;
        }
        .clock .btn-clock {
            left: 110px;
        }
        .clock .btn-clock.to-left {
            left: 60px;
        }
        .clock .btn-timer {
            right: 110px;
        }
        .clock .btn-suspend {
            right: 160px;
        }
        .clock .btn-reset {
            right: 60px;
        }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <div class="clock">
            <span class="text" v-if="index == 0">
                {{ hour }}:{{ min }}:{{ sec }}
            </span>
            <span class="text" v-else>
                {{ min }}:{{ sec }}:{{ msec }}
            </span>
            <button class="btn btn-clock" @click="selectClock" :class="{'to-left': index != 0}">時鍾</button>
            <button class="btn btn-timer" @click="selectTimer" v-if="index == 0">
                <span>計時器</span>
            </button>
            <button class="btn btn-suspend" @click="suspendTimer" v-if="index > 0">
                <span v-if="index == 1">暫停</span>
                <span v-if="index == 2">開始</span>
            </button>
            <button class="btn btn-reset" @click="resetTimer" v-if="index == 1 || index == 2">
                <span>重置</span>
            </button>
        </div>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                index: 0,   // 0表示時鍾頁面,1表示計時器計時狀態,2表示計時器暫停狀態
                hour: '00',  // 頁面顯示的數值
                min: '00',
                sec: '00',
                msec: '00',
                h: 0,       // 臨時保存的數值
                m: 0,
                s: 0,
                ms: 0,
                timer: null,
                date: null
            },
            // 監視器
            watch: {
                index(newValue, oldValue) {
                    clearInterval(this.timer);
                    this.timer = null;
                    this.date = null;
                    // 從時鍾頁面click過來 或 從計時器頁面click過來
                    if (oldValue == 0 || newValue == 0) {   // index等於2時數據保留
                        this.hour = '00'; 
                        this.min = '00';
                        this.sec = '00';
                        this.msec = '00';
                        this.h = 0; 
                        this.m = 0;
                        this.s = 0;
                        this.ms = 0;
                    }
                    this.autoMove();
                }
            },
            methods: {
                // 自動計時
                autoMove() {
                    if (this.index == 0) {
                        this.timer = setInterval(res => {
                            this.date = new Date();
                            this.h = this.date.getHours();
                            this.m = this.date.getMinutes();
                            this.s = this.date.getSeconds();
                            this.hour = this.h > 9 ? this.h : '0' + this.h;
                            this.min = this.m > 9 ?  this.m : '0' + this.m;
                            this.sec = this.s > 9 ? this.s : '0' + this.s;
                        }, 1000);
                    } else if (this.index == 1){
                        this.timer = setInterval(res => {
                            this.ms ++;
                            if (this.ms == 100) {
                                this.s ++;
                                this.ms = 0;
                            }
                            if (this.s == 60) {
                                this.m ++;
                                this.s = 0;
                            }
                            this.msec = this.ms > 9 ? this.ms : '0' + this.ms;
                            this.min = this.m > 9 ?  this.m : '0' + this.m;
                            this.sec = this.s > 9 ? this.s : '0' + this.s;
                        }, 10);
                    }
                },
                // 選擇時鍾
                selectClock() {
                    this.index = 0;
                },
                // 選擇計時器
                selectTimer() {
                    this.index = 1;
                },
                // 開始、暫停計時器
                suspendTimer() {
                    if (this.index == 1) {
                        this.index = 2;
                    } else if (this.index == 2) {
                        this.index = 1;
                    }
                },
                // 重置計時器
                resetTimer() {
                    this.index = 0;
                    setTimeout(res => {
                        this.index = 1;
                    }, 1);
                }
            },
            mounted() {
                this.autoMove();
            }
        })
    </script>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM