JS

//javascript模块化
//json对象的方式
var seckill = {
    //封装秒杀相关的URL
    URL: {
        now: function () {
            return 'seckill/time/now';
        },
        exposer:function(seckillId){
            return '/seckill/'+seckillId+'/exposer/';
        },
        excution:function(seckillId,md5){
            return '/seckill/'+seckillId+md5+'/execution/';
        }
    },
    // 验证手机号
    validatePhone: function (phone) {
        if (phone && phone.length == 11 && !phone.isNaN()) {
            return true;
        } else {
            return false;
        }
    },
    handlerSeckill:function(seckillId,node){
    node.hide().html('<button class="btn btn-primary btn-lg" id="killBtn">开始秒杀</button>  ');
        $.post(seckill.URL.exposer(seckillId),{},function(result){
           //在回掉函数中执行交互逻辑
            if(result&&result['success']){
                var exposer=result['data'];
                if(exposer['exposed']){
                    //开启秒杀
                    //获取秒杀地址
                    var md5=exposer['md5'];
                    var killUrl=seckill.URL.execution(seckillId,md5);
                    console.log("killUrl"+killUrl);
                    // 绑定一次点击事件
                     $('#killBtn').one('click',function(){
                         //执行秒杀请求
                         // 1 先禁用按钮
                        $(this).addClass('disable');
                        $.post(killUrl,{},function(result ){
                            if(result&&result['success']){
                                var killResult=result['data'];
                                var state=killResult['state'];
                                var stateInfo=killResult['stateInfo'];
                                // 显示秒杀结果 注意写法与123行的不同
                                node.html('<span class="lable lable-success">'+stateInfo+'</span>')
                            }
                        });
                     });
                    node.show();
                }else{
                    //未开启秒杀
                    //json获取数据,重新计时 PC 机和客户端时间不一致
                    var now=exposer['now'];
                    var start=exposer['start'];
                    var end=exposer['end'];
                    seckill.countdown(seckillId,now,start,end);
                }
            }else {
                console.log("result"+result);
            }

        });
    },
    countdown:function (seckillId,nowTime,startTime,endTime) {
    //时间判断
        var seckillBox=$('#seckill-box');
        if(nowTime>endTime){
            seckillBox.html('秒杀结束');
        }else if(nowTime<startTime){
            //秒杀未开始 倒计时
            var killTime=new Date(startTime+1000);
            seckillBox.countdown(killTime,function(event){
                var format=event.striftime('秒杀倒计时: %D天 %H时 %M分 %S秒 ');
                seckillBox.html(format);
                //倒计时结束后h回掉事件
            }).on('finish.countdown',function(){
                // 获取秒杀地址,回调x显示逻辑,执行秒杀
                seckill.handlerSeckill(seckillId,seckillBox);
            });
        }else {
            // 秒杀开始
            seckill.handlerSeckill(seckillId,seckillBox);

        }

    },

    //detail页面秒杀逻辑
    detail: {
        //详情页初始化 params前端页面传来的参数
        //前端页面传人json类型的参数
        // <script type="text/javascript">
        // $(function () {
        //     //使用EL表达式传入参数
        //     seckill.detail.init({
        //         seckillId:${seckill.seckillId},
        //         startTime:${seckill.startTime.time},//毫秒
        //         endTime:${seckill.endTime.time}
        //     });
        // })
        // </script>
        init: function (params) {
            //手机验证和登录,即使交互
            var killPhone = $.cookie("killPhone");

            if (!seckill.validatePhone(killPhone)) {
                //绑定phone控制输出,killPhoneModel是bootstrap的一个model组件 默认为fade 隐藏
                var killPhoneModal = $('#killPhoneModal');
                killPhoneModal.modal({
                    show: true,
                    backdrop: false,
                    keyboard: fale

                });
                $('#killPhoneBtn').click(function () {
                    var inputPhone = $('#killPhoneKey').val();
                    if (seckill.validatePhone(inputPhone)) {
                        //电话写入cookie
                        $.cookie('killPhone', inputPhone, {expires: 7, path: '/seckill'});
                        window.location.reload();
                    } else {
                        $('#killPhoneMessage').hide().html('<lable class="lable lable-danger">手机号错误!</lable>').show(300);
                    }
                });
            }
            $.get(seckill.URL.now(), {}, function (result) {
                if (result && result['success']) {
                    var nowTime = result['data'];
                    var startTime = params['startTime'];
                    var endTime = params['endTime'];
                    var seckillId = params['seckillId'];
                    //时间判断
                    seckill.countdown(seckillId,nowTime,startTime,endTime);
                } else {
                    console.log("result" + result);
                }
            });
        }
    }
}

转载于:https://my.oschina.net/u/2742720/blog/821810

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值