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 相关文章推荐
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
js实现圆盘记速表
Aug 03 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
Sep 28 Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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的curl实现get和post的代码
2008/08/23 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
python opencv实现简易画图板
2020/08/27 Python
Linux如何压缩可执行文件
2014/03/27 面试题
教师个人剖析材料
2014/02/05 职场文书
写求职信有什么意义
2014/02/17 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
python如何做代码性能分析
2021/04/26 Python
Mysql 用户权限管理实现
2021/05/25 MySQL
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技