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 相关文章推荐
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
JavaScript中跨域调用Flash的方法
Aug 11 Javascript
移动端脚本框架Hammer.js
Dec 15 Javascript
bootstrap css样式之表单
Jan 19 Javascript
jQuery常用选择器详解
Jul 17 jQuery
js实现多张图片延迟加载效果
Jul 17 Javascript
使用vue构建移动应用实战代码
Aug 02 Javascript
vue cli2.0单页面title修改方法
Jun 07 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
详解ES6实现类的私有变量的几种写法
Feb 10 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
php adodb连接mssql解决乱码问题
2009/06/12 PHP
phpize的深入理解
2013/06/03 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
动态加载js和css(外部文件)
2013/04/17 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
个人安全生产责任书
2014/07/28 职场文书
走群众路线剖析材料
2014/10/09 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
赢在执行观后感
2015/06/16 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
python中print格式化输出的问题
2021/04/16 Python
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python