zoukankan      html  css  js  c++  java
  • 可扩展定制可复用的倒计时插件

    倒计时功能在网站开发过程中经常遇到,像各大电商网站做促销或者团购网站,经常看到距离活动结束还剩多少天,多少小时,多少分钟,多少秒。因些我最近写了一个插件,方便日后使用和扩展,由于提高开发速度,我基于jquery库利于面向对象的思想开发了。

    这个倒计时插件js我给它起名为countDown,使用起来非常方便,只需配置几个参数而已,支持开始时间自定义,写好了与后台数据对接的接口,用这个插件可谓是省事再省事,省时再省时了,呵呵。

    下面直接上代码:

    /**
    * @Name:   易维护、可扩展定制的 倒计时插件
    * @Author:  大兵博客(虾兵) @Blog:http://ddbing.com/
    * @param   参数暂支持三个,cid,data,nowDate。
    * @param   cid: 倒计时模块id,以区分多个倒计时模块的情况。
    * @param   nowDate: 开始时间,不设置则默认为系统当前时间。
    * @param   data: 初始化后台传过来的活动结束时间数据,JSON格式如:
        [
            { "id":"1",time:"2015/09/05 10:27:30" },
            { "id":"2",time:"2015/09/09 09:08:40" },
            { "id":"3",time:"2015/06/03 12:30:10" }
        ];
    */
    ;(function ($, window, document, undefined) {
     
        var countDown = function(cid,data,nowDate){
            this.cid = cid;
            this.data = data;
            this.nowDate = nowDate;
        };
     
        countDown.prototype = {
            constructor: countDown,
            main: function(){
                var that = this, data, newData = [];
                this.init();
                data = that.backData;
                that.initTemp(data);
                that._init ? that._init = false:'';
                $.each(data,function(i,val){
                    if (val.ms) {
                        newData.push({id:val.id,ms:val.ms});
                    };
                });
                that.backData = newData;
                setTimeout(function(){
                    that.handle();
                },1000);
            },
             
            //初始化处理
            init: function(){
                var that = this, data = that.data, backData=[], ms = 0, msEnd, msNow, _init = that._init = true;
                msNow = ( new Date(that.nowDate) ).getTime() || ( new Date() ).getTime();
                $.each(data,function(i,val){
                    msEnd =( new Date(val.time) ).getTime();
                    ms = msEnd - msNow;
                    if ( ms < 1000 ) {
                        that.msHandle(ms,val.id,'-1');
                    }else{
                        that.msHandle(ms,val.id);
                    };
                     
                });
            },
     
            //初始转化时间格式
            msHandle: function(ms,id,flag){
                var D, H, M, S, objTime = {}, backData = this.backData ||  [] ;
               if (flag < 0) {
                     objTime = {
                       id: id,
                       no: flag
                    };
                     backData.push(objTime);
               }else{
                    S = Math.floor( ms/1000 );
                    M = Math.floor( S/60 );
                    H = Math.floor( M/60 );
                    D = Math.floor( H/24 );
                    S = S % 60;
                    M = M % 60;
                    H = H % 24;
                    objTime = {
                        id:id,
                        D:D,
                        H:H,
                        M:M,
                        S:S,
                        ms:ms
                    };
                    objTime = this.normTime(objTime);
                    backData.push(objTime);
                };
                this.backData = backData;
                return this;
            },
     
            //倒计时定时器
            handle: function(){
                var that = this, timer, data = that.backData, cid = this.cid;
                $.each(data,function(i,val){
                    var ms = val.ms;
                    if (ms < 1000) {
                        $('#'+cid).find('#count'+val.id).html('距离活动结束还剩:活动已结束');
                    }else{
                        ms -= 1000;
                        that.msChange(ms, val.id);
                        data[i].ms = ms;
                    };
                });
                !!timer && clearTimeout(timer);
                timer = setTimeout(function(){
                    that.handle();
                },1000);
            },
     
            //ms处理
            msChange: function(ms,id){
                var D, H, M, S, objTime = {},cid = this.cid, data = this.backData;
                S = Math.floor( ms/1000 );
                M = Math.floor( S/60 );
                H = Math.floor( M/60 );
                D = Math.floor( H/24 );
                S = S % 60;
                M = M % 60;
                H = H % 24;
                objTime = {
                    id:id,
                    D:D,
                    H:H,
                    M:M,
                    S:S
                };
                objTime = this.normTime(objTime);
                $('#'+cid).find('#count'+id).children('.d').children('i').text( objTime.D );
                $('#'+cid).find('#count'+id).children('.h').children('i').text( objTime.H );
                $('#'+cid).find('#count'+id).children('.m').children('i').text( objTime.M );
                $('#'+cid).find('#count'+id).children('.s').children('i').text( objTime.S );
            },
     
            //统一处理时刻格式
            normTime: function(objTime){
                for (var in objTime) {
                    if (objTime.hasOwnProperty(i) && i != 'id') {
                        objTime[i] = objTime[i] < 10  ? '0' + objTime[i] : objTime[i];
                    };
                };
                return objTime;
            },
     
            //初始化模板
            initTemp: function(data){
                var temp = '';
                $.each(data,function(i,val){
                    if (val.no < 0) {
                        temp +='距离活动结束还剩:活动已结束';
                    }else{
                        temp +='距离活动结束还剩:'+ val.D +'天'
                               +''+ val.H +'时'+ val.M +'分'
                               +''+ val.S +'秒'
                           +'';
                    };
                });
                temp +='';
                $('#'+this.cid).append(temp);
            }
        };
        window.countDown = countDown;
    }(jQuery, window, document));

    这段代码就不多解释了,参数上面一段备注已很详细,js中每个功能函数也有备注。

    HMTL中调用方式如下:

    var time_data = [
            "id":"1",time:"2015/09/05 10:27:30" },
            "id":"2",time:"2015/09/09 09:08:40" },
            "id":"3",time:"2015/06/03 12:30:10" },
            "id":"4",time:"2015/10/12 13:15:30" },
            "id":"5",time:"2015/09/11 18:36:40" }
        ];
    /**
    * @param 创建倒计时对象
    * @param 倒计时模块id:countdown1
    * @param 倒计时初始化数据
    * @param 最后一个参数倒计时开始时间,格式如:"2015/09/03 10:30:00",不传则默认为系统当前时间
    */
    var tCountDown = new countDown('countdown1',time_data,'2015/09/03 10:30:00');
    tCountDown.main();

    这个插件你可以用到你网站的任何地方,商业非商业都行,不过恳请仁兄使用时保留备注或者注明代码来源,以对我写代码的鼓励及脑细胞的补偿,也方便日后迭代更新。使用时样式皮肤自行美化。

    如果这篇文章对您有帮助,请前去 Github 点亮星星 star 来鼓励我写下去的勇气

  • 相关阅读:
    iOS:网络检测
    WinJS:设置listView垂直滚动
    iOS:在AppDelegate中定义managed object context
    简笔画项目总结: ios绘图机制 & 实现记录笔迹功能
    CSS基础
    DOM小结
    iOS:view.frame
    WP:初探
    iOS:UIWebView scrollView 的分页滑动问题
    Mono for Android: 利用mono for android开发的第一个程序
  • 原文地址:https://www.cnblogs.com/liqingbo/p/4824447.html
Copyright © 2011-2022 走看看