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乱码问题分析及解决方案
Apr 12 Javascript
jQuery is()函数用法3例
May 06 Javascript
20个实用的JavaScript技巧分享
Nov 28 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
JavaScript Date对象详解
Mar 01 Javascript
javascript事件模型介绍
May 31 Javascript
Angularjs 设置全局变量的方法总结
Oct 20 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
Dec 08 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
深入理解ES6的迭代器与生成器
Aug 19 Javascript
vue router 配置路由的方法
Jul 26 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 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
PHP中的串行化变量和序列化对象
2006/09/05 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
基于python代码实现简易滤除数字的方法
2018/07/17 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
Python3中列表list合并的四种方法
2019/04/19 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
大整数数相乘的问题
2012/07/22 面试题
写给妈妈的道歉信
2014/01/11 职场文书
先进个人获奖感言
2014/01/24 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
公司委托书格式
2014/08/01 职场文书
检讨书怎么写
2015/01/23 职场文书
社区安全温馨提示语
2015/07/14 职场文书
自考生自我评价
2019/06/21 职场文书
小学作文之描写天气
2019/08/15 职场文书