使用AngularJS写一个支付倒计时

说明:

1、前端只负责展示倒计时,不具备实际功能;
2、实际实现方式:数据库中设置一个每分钟执行一次的定时任务(故与实际情况会有一分钟以内的误差),只要订单创建时间超过15分钟会自动将订单状态改为“取消”。

遇到难点:

1、字符串转date中,苹果satari浏览器不支持“ yyyy-mm-dd hh:mi:ss”格式,须将字符串转为“ yyyy/mm/dd hh:mi:ss
new Date($scope.order.createtime.replace(/\-/g, "/"))

2、angularjs 对JavaScript自带的 定时任务window.setInterval 支持不完善,需使用其自有的方法 $interval

html相关代码(使用ionic框架):

		<div ng-class="{true: 'payCountDown', false: ''}[payClass]" ng-bind="payCountDown">
		</div>

js相关代码:

$scope.order = Storage.get("order");//order为订单信息(在订单创建时将其存入缓存sessionStorage.setItem),里面包含订单创建时间
	var createTime;//订单创建时间
	var curTime;//当前时间
	var totalSecond;//设置计时总时间(分钟)
	if($scope.order.createtime !=null){
		//为了支持safari浏览器
		createTime=new Date($scope.order.createtime.replace(/\-/g, "/")).getTime();
		curTime=new Date().getTime();
		totalSecond=Math.round((createTime+15*60*1000-curTime)/1000);
	}else{
		totalSecond = 15 * 60; 
	}
	
	/**
	 * 支付倒计时
	 */
	timePromise = $interval(function(){  
		if (totalSecond >= 0) {
			var t1 = Math.floor(totalSecond / 60);
			var m = t1 < 10 ? "0" + t1 : t1;
			var t2 = totalSecond - t1 * 60;
			var s = t2 < 10 ? "0" + t2 : t2;
			totalSecond = totalSecond - 1;
			$scope.payClass=true;//添加class
			$scope.payCountDown="支付剩余时间:"+m+"分钟"+s+"秒"
		} else {
			$scope.confirmPay=true;
			$scope.payClass=true;//添加class
			$scope.payCountDown= "支付超时,请重新下单!";
			$interval.cancel(timePromise);//终止倒计时
		}
	},1000)


css代码:

.payCountDown{
	color:#FFFFFF;
	background-color:red;
	text-align:center;
	padding:14px 0;
	opacity:0.8
}

运行效果:



补充:

oracle定时任务代码:
begin
  sys.dbms_job.submit(job => :job,
                      what => 'UpdateOrderStatues;',
                      next_date => to_date('05-06-2017 10:05:50', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate +1/1440');
  commit;
end;
/

另外,写这个只是给大家提供一个思路。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值