vue简单练习 桌面时钟的实现代码实例


Posted in Javascript onSeptember 19, 2019

用vue实现一个简单的网页桌面时钟,主要包括时钟显示、计时、暂停、重置等几个功能。

效果图如下,页面刚进来的时候是一个时钟,时钟上显示的时、分、秒为当前实际时间,点击计时器按钮后,页面变成一个计时器,并且计时器按钮被暂停与重置两个按钮替代,分别对计时器进行暂停和重置,若点击时钟按钮会切换回时钟界面。

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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js活用事件触发对象动作
Aug 10 Javascript
深入解析JavaScript中的变量作用域
Dec 06 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
使用js实现的简单拖拽效果
Mar 18 Javascript
JS对字符串编码的几种方式使用指南
May 14 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
加载 vue 远程代码的组件实例详解
Nov 20 Javascript
原生JS实现京东查看商品点击放大
Dec 21 Javascript
JS实现滚动条触底加载更多
Sep 19 #Javascript
Vue v-text指令简单使用方法示例
Sep 19 #Javascript
Vue.set 全局操作简单示例
Sep 19 #Javascript
layui对工具条进行选择性的显示方法
Sep 19 #Javascript
基于js实现抽红包并分配代码实例
Sep 19 #Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 #Javascript
Vue 实例事件简单示例
Sep 19 #Javascript
You might like
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php获取图片信息的方法详解
2015/12/10 PHP
php实现留言板功能
2017/03/05 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
python调用shell的方法
2013/11/20 Python
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python中pivot()函数基础知识点
2021/01/03 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
工程专业求职自荐书范文
2014/02/08 职场文书
《金子》教学反思
2014/04/13 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
个人债务授权委托书
2014/10/17 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
南京南京观后感
2015/06/02 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书