Angular2实现的秒表及改良版示例

本文实例讲述了Angular2实现的秒表及改良版。分享给大家供大家参考,具体如下:

初版

代码:

export class Watches {
  id: number;
  str: string;
}
export let watcheList: Watches[] = [{
  id: 0, str: '123456'
}, {
  id: 1, str: '564822'
}]
//watchList 是一个静态类
watchList = watcheList;
watchStr: string;
//判断是否是第一次点击startWatch
num: number = 0;
//分 秒 毫秒
minute: number = 0;
second: number = 0;
millisecond: number = 0;
//临时变量 存储计次时的时间,后加入watcheList数组
temp= {
 id: 0,
 str: '0'
};
//定时器的名字
inter: any;
constructor() { }
 resetWatch() {
   //清零
  this.millisecond = 0;
  this.second = 0;
  this.minute = 0;
  this.temp.str = '000000';
  watcheList.length = 0;
 }
timer() {
  //每隔43ms,调用该函数,所以增加43
 this.millisecond = this.millisecond + 43;
 if (this.millisecond >= 1000) {
  this.millisecond = 0;
  this.second = this.second + 1;
 }
 if (this.second >= 60) {
  this.second = 0;
  this.minute = this.minute + 1;
 }
//当小于10是,在前面加一个0,形式则变为00:00:00
 this.watchStr = (this.minute > 10 ? this.minute : '0' + this.minute) + ':'
  + (this.second > 10 ? this.second : '0' + this.second) + ':'
  + (this.millisecond > 10 ? this.millisecond : '0' + this.millisecond);
}
 startWatch(event) {
  this.num = this.num + 1;
  if (this.num > 1) {
   //该状态应该为计次
   temp.id = this.watchList.length;
   temp.str = this.watchStr;
   this.watchList.push(temp);
  } else {
   this.inter = setInterval(() => {
    this.timer();
   }, 43);
  }
 }
 stopWatch(event) {
  this.num = 0;
  if (this.inter) {
   clearInterval(this.inter);
  }
 }
}

原理:

在计时器timer函数里面,定义了一个变量毫秒millisecond,每隔43ms调用timer函数,所以millisecond每次增加43,而后1000ms之后seond增加1,60s之后,minute增加1.

缺点:

函数的运行时间不可控,所以毫秒的增加不准确。

改良版

代码:

// 秒表
export class Watches {
  id: number;
  value: number;
}
export let watcheList: Watches[] = []
export class StopwatchComponent {
 //导入的静态类
 watchList = watcheList;
 //临时变量,用来存贮计次时的时间
 temp: number;
 //判断startWatch是第一次开始,还是计次
 num: number = 0;
 //开始时间
 startTime: number;
 //当前时间
 nowTime: number;
 //时间差
 timerRunner: number = 0;
 //interval函数的名称
 inter: any;
 constructor() { }
 resetWatch() {
  //清零
  this.timerRunner = 0;
  this.watchList.length = 0;
 }
 startWatch(event) {
  this.temp = this.timerRunner;
  //开始计时的时间
  this.startTime = Date.now();
  this.num = this.num + 1;
  if (this.num > 1) {
   //当前状态为计时,将计时的数据加入进watchList
   let watchObj: Watches = {
    id: 0,
    value: 0
   }
   watchObj.id = this.watchList.length;
   watchObj.value = this.timerRunner;
   this.watchList.push(watchObj);
  } else {
   this.inter = setInterval(() => {
    this.nowTime = Date.now();
    this.timerRunner = this.temp + this.nowTime - this.startTime;
   }, 43);
  }
 }
 stopWatch(event) {
  this.num = 0;
  if (this.inter) {
   clearInterval(this.inter);
  }
 }
}

原理:当第一次点击startWatch时,获取当前时间作为开始时间,并每43ms触发定时器,获取最新时间。时间差则为最新时间减去开始时间

PS:这里再为打击推荐一款功能相似的在线工具供大家参考:

在线秒表工具:
http://tools.jb51.net/bianmin/miaobiao

更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》

希望本文所述对大家AngularJS程序设计有所帮助。

(0)

相关推荐

  • ionic+AngularJs实现获取验证码倒计时按钮

    按钮功能为:点击"获取验证码"--按钮不可用-设置倒计时-60秒后重新获取. 主要实现原理:点击后,设置一个$interval,每一秒更改一次剩余时间,并依赖Angular数据绑定实时显示在页面中.设置一个$timeout,60秒后将按钮初始化到可用状态. 实现代码: (1)js代码,设置成一个directive以便多次调用. angular.module('winwin').directive('timerbutton', function($timeout, $interval){

  • Angular6 发送手机验证码按钮倒计时效果实现方法

    1.组件中定义两个变量,分别用于控制按钮是否可以点击(countDown)和按钮上的倒计时数字(countDownTime): countDown = false; countDowmTime = 60; // 这里设置倒计时为60S showButtonText = '发送短信验证码': // 可以控制动态改变的按钮提示信息 2.写一个获取短信验证码的方法绑定到页面的获取短信验证码按钮上: getCode(event) { this.validateForm1.controls['phone'

  • Ionic + Angular.js实现验证码倒计时功能的方法

    前言 之前跟大家分享了关于 Android 原生实现验证码倒计时,地址是这里,现在公司使用 Ionic 开发的 App 也要实现类似的功能,现在也记录下来,供大家参考: 效果图: 正文 首先介绍下与本文相关的概念 $interval $interval 是 window.setInterval 的 Angular 包装形式,函数如果在没有被取消的时候会无限执行.(取消使用 cancel(promise) ) 用法: $interval(fn,delay,[count],[invokeApply]

  • AngularJs 延时器、计时器实例代码

    1.$timeout延时器 apptest.controller("main",function($scope,$timeout){ $scope.pink="pink"; $scope.box="第二个盒子"; $timeout(function(){ $scope.pink="第一个盒子内容,延迟两秒后改变了"; },2000); setTimeout(function(){ $scope.pink="第一个盒子

  • AngularJS 验证码60秒倒计时功能的实现

    最近在做AngularJS 项目,这是写的一个60秒倒计时,  angularjs 与jq不同, 不是使用dom节点操作,而是数据操作,写倒计时,最好是使用$timeout与$interval ,不要使用settimeout与setinterval .$timeout与$interval 可使绑定数据直接更新. html <a href="javascript:" rel="external nofollow" ng-click="sendphone

  • Angular.js实现获取验证码倒计时60秒按钮的简单方法

    前言 本文主要介绍了关于Angular.js实现获取验证码倒计时60秒按钮的相关内容,关于这个功能相信不用多介绍,大家都不陌生,所以下面话不多说了,来一起看看实现的方法吧. 一.controller中代码 angular.module('controllers') .controller('LoginCtrl', function ($scope, $location,$ionicLoading,$rootScope,$interval,$timeout) { $scope.timer = fa

  • angular2倒计时组件使用详解

    项目中遇到倒计时需求,考虑到以后在其他模块也会用到,就自己封装了一个组件.便于以后复用. 组件需求如下: - 接收父级组件传递截止日期 - 接收父级组件传递标题 组件效果 变量 组件countdown.html代码 <div class="count-down"> <div class="title"> <h4> {{title}} </h4> </div> <div class="body

  • AngularJS 支付倒计时功能实现思路

    说明: 1.前端只负责展示倒计时,不具备实际功能: 2.实际实现方式:数据库中设置一个每分钟执行一次的定时任务(故与实际情况会有一分钟以内的误差),只要订单创建时间超过15分钟会自动将订单状态改为"取消". 遇到难点: 1.字符串转date中,苹果satari浏览器不支持"yyyy-mm-dd hh:mi:ss"格式,须将字符串转为"yyyy/mm/dd hh:mi:ss" new Date($scope.order.createtime.rep

  • Angular2实现的秒表及改良版示例

    本文实例讲述了Angular2实现的秒表及改良版.分享给大家供大家参考,具体如下: 初版 代码: export class Watches { id: number; str: string; } export let watcheList: Watches[] = [{ id: 0, str: '123456' }, { id: 1, str: '564822' }] //watchList 是一个静态类 watchList = watcheList; watchStr: string; //

  • Angular2 组件间通过@Input @Output通讯示例

    本文介绍了Angular2 组件间通过@Input @Output通讯示例,分享给大家,具体如下: 父组件传给子组件: 子组件设置@Input属性,父组件即可通过设置html属性给子组件传值. 子组件: @Input() title:string; _name:string = ''; @Input() set name(name:string) { this._name=(name&&name.trim())||''; } 上面的代码设置了两个可供父组件传入的属性:title和name,

  • CMD记录器改良版代码

    安装 把代码保存为cmd.bat 放置system32下 把cmd.exe copy为cmd.gif  注册表 添加  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe  字串 Debugger  字串内容 cmd.gif /c cmd.bat  复制代码 代码如下: @echo off  title %ComSpec%  rem CMD 记录器

  • 学生视角手把手带你写Java 线程池改良版

    目录 Java手写线程池(第二代) 第二代线程池的优化 线程池构造器 线程池拒绝策略 execute方法 手写线程池源码 MyExecutorService MyRejectedExecutionException MyRejectedExecutionHandle 核心类MyThreadPoolExecutor 线程池测试类 Java手写线程池(第二代) 第二代线程池的优化 1:新增了4种拒绝策略.分别为:MyAbortPolicy.MyDiscardPolicy.MyDiscardOldes

  • 详解Angular2中Input和Output用法及示例

    对于angular2中的Input和Output可以和AngularJS中指令作类比. Input相当于指令的值绑定,无论是单向的(@)还是双向的(=).都是将父作用域的值"输入"到子作用域中,然后子作用域进行相关处理. Output相当于指令的方法绑定,子作用域触发事件执行响应函数,而响应函数方法体则位于父作用域中,相当于将事件"输出到"父作用域中,在父作用域中处理. 看个angular2示例吧,我们定义一个子组件,获取父作用域的数组值并以列表形式显示,然后当点击

  • angular2 ng2 @input和@output理解及示例

    angular2 @input和@output理解 先做个比方,然后奉上代码 比如: <talk-cmp [talk]="someExp" (rate)="eventHandler($event.rating)"> input, [talk]="someExp" 这个标签可以理解为一个专门的监听器,监听父组件传递过来的someExp参数,并存入自身组件的talk变:好像是开了个后门,允许且只允许父组件的someExp进入,一旦进入立刻

  • angular2路由切换改变页面title的示例代码

    angular2里默认切换路由或者切换组件,页面的title是不会变化的. angular2在路由设置里提供了data参数可以传值,如下 { path: 'home', component: HomeComponent, data: { title: 'Home', aaa: 'aaaa', bbb: 'bbbb', ccc: "cccc"} } path和component是常用的属性,path是地址栏的显示,component是调用的组件. data则可以传数据,在组件内可以调用.

  • Angular2.0实现modal对话框的方法示例

    本文实例讲述了Angular2.0实现modal对话框的方法.分享给大家供大家参考,具体如下: 觉得写的比较巧妙的就是样式的选取~记录下 CSS部分 .font { font-family: "Microsoft YaHei", Arial; font-size: 12px; color: #333333; } .ky-modal-content { min-width: 520px; min-height: 240px; } .ky-modal-header { /*height :

  • Angular2+国际化方案(ngx-translate)的示例代码

    本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接. https://github.com/ngx-translate/core/blob/fb02ca5920aae405048ebab50e09db67d5bf12a2/README.md 安装 首先需要安装npm依赖: npm install @ngx-translate/core --save npm install @ngx-translate/http-loader --sav

  • ASP 改良版MD5、SHA256多重加密类(二次及多次)

    目前可实现:MD5算法.SHA256算法.先MD5后SHA256.先SHA256后MD5.两次MD5.两次SHA256.前8位MD5算法后8位SHA256算法.前8位SHA256算法后8位MD5算法.取密码最后一个字符的AscW值与8的余数作为加密方案系数.16位MD5加密.32位MD5加密.8位SHA256加密.16位SHA256加密.24位SHA256加密.32位SHA256加密.40位SHA256加密.48位SHA256加密.56位SHA256加密.64位SHA256加密等算法,看过源码之

随机推荐