日历组件

结构

var _args = {
p: $DB,
defDate:(new Date().date2Str()).split(' ')[0],//2016-1-2 10:12:32
computeM:todayM,
computeY:todayY,
dateHead:['日','一','二','三','四','五','六'],
month:[{idx:1,text:1},{idx:2,text:2},{idx:3,text:3},{idx:4,text:4},{idx:5,text:5},{idx:6,text:6},{idx:7,text:7},{idx:8,text:8},{idx:9,text:9},{idx:10,text:10},{idx:11,text:11},{idx:12,text:12}],
year:itemsYear,
headClick: me._fn,
bodyClick: me._fn
}

WT.UI.F_calendar = function(j) {
    var me = this;
    me.comType = 'F_calendar';
    WT.ext(me, WT.Util);
    //--------------------
    //获取年份数组,f前f年(包括当年),n后n年
    var yearMin = 2;
    var yearMax = 2;
    var itemsYear = getNyear(yearMin,yearMax,[2016,8,2]);
    var today = new Date();
    var todayY = today.getFullYear();
    var todayM = today.getMonth()+1;
    //-------------------
    var _args = {
        p: $DB,
        defDate:(new Date().date2Str()).split(' ')[0],//2016-1-2 10:12:32
        computeM:todayM,
        computeY:todayY,
        dateHead:['','','','','','',''],
        month:[{idx:1,text:1},{idx:2,text:2},{idx:3,text:3},{idx:4,text:4},{idx:5,text:5},{idx:6,text:6},{idx:7,text:7},{idx:8,text:8},{idx:9,text:9},{idx:10,text:10},{idx:11,text:11},{idx:12,text:12}],
        year:itemsYear,
        headClick: me._fn,
        bodyClick: me._fn
    }
    me.args = me.initArgs(j, _args);
    var c_date, _baseDiv,_body;

    me.computDate = me.get('defDate');
    me.setTime = me.get('defDate');
    //设置年份,dStr:日期(2016-1-1);min:相对于dstr的前min年;max:后max年
    me.setDate =function(dStr,min,max){
        me.setTime = dStr;
        var _a=dStr?dStr.split('-'):me.get('defDate').split('-');
        me.args.year = getNyear(min,max,_a);
        me.args.computeM = _a[1];
        me.args.computeY = _a[0];
        me.computDate = _a;
        _baseDiv.head.h(laytpl(WT.UI.Temp.calendar_head.help()).render(me.args));
        drawMonth(dStr);
    }

    var layout = function() {
        var _b = me.base = me.get('p').adElm('', 'div');
        _b = _b.adElm('', 'div').cn('h300 w300 pa ml5 b_18 mt3');
        _baseDiv = new WT.UI.BaseDiv({
            p: _b,
            head_h: 50,
            foot_h: 0
        })
        _baseDiv.head.adElm('', 'div').h(laytpl(WT.UI.Temp.calendar_head.help()).render(me.args));
        _body = _baseDiv.body.ac('mt5');
        drawMonth();
    }
    //画月份
    var drawMonth = function(dStr){
        var _a=dStr?dStr.split('-'):me.get('defDate').split('-');
        dStr=(_a[0]+'-'+_a[1]+'-'+'1');
        me.computDate = (_a[0]+'-'+_a[1]+'-'+_a[2]);
        var _d1=new Date(dStr);
        var _day = new Date(dStr).getDay();
        _d1.setDate(_d1.getDate()-_day-1);
        var _month=new Date(dStr).getMonth();
        var dTmp='<div class="dib"><span dStr={4} class="dib cp tac pt10 {3}" isDisabled={5} isTody={6} isSelect={7} style="height:{0}px;width:{1}px">{2}</span></div>';
        var _dateAry=[];
        var _h = (_body.csn('height')-4)/6-10;
        var _w = (_body.csn('width')-4)/7;

        for(var i=0;i<42;i++){
            _d1.setDate(_d1.getDate()+1);
            if(today.date2Str().split(' ')[0] === _d1.date2Str().split(' ')[0]) {//今天
                _dateAry.push(dTmp.format(_h,_w,_d1.getDate(),'bc_17',_d1.date2Str().split(' ')[0],(_month==_d1.getMonth())? 0 : 1,1,0))
            }else if(me.selElm && me.selElm.attr('dstr')===_d1.date2Str().split(' ')[0]){//选中
                _dateAry.push(dTmp.format(_h,_w,_d1.getDate(),'bc_18',_d1.date2Str().split(' ')[0],(_month==_d1.getMonth())? 0 : 1,0,1))
            }else{//其他
                _dateAry.push(dTmp.format(_h,_w,_d1.getDate(),(_month==_d1.getMonth())?'c_10 F_calendar':'c_17 cna',_d1.date2Str().split(' ')[0],(_month==_d1.getMonth())? 0 : 1,0,0))
            }
        }
        _body.h(_dateAry.join(''));
    }
    //参数:1加一个月 -1 减一个月
    var monthDo = function(n){
        var _d1= new Date(me.computDate);
        _d1.setMonth(_d1.getMonth()+1*n);
        drawMonth(_d1.date2Str().split(' ')[0]);
        me.computDate=_d1.date2Str().split(' ')[0];
        var _computeD = me.computDate.split('-');
        me.args.computeM=_computeD[1];
        me.args.computeY=_computeD[0];
        return 1;
    }
    function getNyear(f,n,dStr){
        var _year = [];
        var _d=dStr?new Date(dStr[0],dStr[1],dStr[2]):new Date();
        var _nYear = _d.getFullYear();
        var _upYear = _nYear-f;
        for(var i=0; i<f+n; i++){
            _year.push({idx:i,text:++_upYear})
        }
        return _year;
    }
    var eventBind = function() {
        me.base.evt('click',function(e){
            var e = WT.e.fix(e),_e = e.t;
            e.stop();
            if(_e.attr('opt') == 'head_month'){//
                _e.evt('change',function(e){
                    var _d1= new Date(me.computDate);
                    _d1.setMonth(+_e.value-1);
                    drawMonth(_d1.date2Str().split(' ')[0]);
                    me.computDate=_d1.date2Str().split(' ')[0];
                })
            }else if(_e.attr('opt') === 'head_year'){//
                _e.evt('change',function(e){
                    var _d1= new Date(me.computDate);
                    _d1.setYear(+_e.value);
                    drawMonth(_d1.date2Str().split(' ')[0]);
                    me.computDate=_d1.date2Str().split(' ')[0];
                })
            }else if(_e.attr('opt') === 'left'){//左TODO:向左添加月份约束
                if ((+(me.setTime.split('-')[0])-yearMin+1) <= +me.computDate.split('-')[0]){
                    monthDo(-1) && _baseDiv.head.h(laytpl(WT.UI.Temp.calendar_head.help()).render(me.args));
                    //console.log(me.computDate);
                }
                else
                    alert('不在区间内');
            }else if(_e.attr('opt') === 'right'){//右TODO:向右添加月份约束
                if ((+(me.setTime.split('-')[0])+yearMax) >= +me.computDate.split('-')[0]){
                    monthDo(1) && _baseDiv.head.h(laytpl(WT.UI.Temp.calendar_head.help()).render(me.args));
                    //console.log(me.computDate);
                }
                else
                    alert('不在区间内');
            }else if(_e.tagName === 'SPAN' && _e.attr('isDisabled') === "0"){//选中日期,显示在input中
                if (me.selElm) {
                    me.selElm.dc('bc_18');
                    me.selElm.attr('isSelect',"0");
                    if ( _e.attr('isTody') !== "0") {
                        me.selElm.ac('F_calendar');
                    }
                }
                me.selElm = _e;
                _e.dc('F_calendar');
                _e.ac('bc_18');
                me.selElm.attr('isSelect',"1");
                me.get('bodyClick')(_e);//点击日期后的回调函数,参数: _e.attr('dStr')即获取的日期
            }
        })
    }
    me.init = function() {
        layout();
        eventBind();
    }
    if (arguments.length) {
        me.init();
    }
    return me;
}
View Code
字符串模板
calendar_head: function() {
        /*
            <div class="tac p2">
                <span opt="left" class="fa fa-arrow-left mr30 c_13"></span>
                <div class="dib">
                    <select opt="head_month">
                        {{# for(var i=0;i<d.month.length;i++){ }}
                            {{# if(d.computeM == d.month[i].text){ }}
                                <option selected idx={{d.month[i].idx}}>{{d.month[i].text}}</option>
                            {{# }else{ }}
                                <option idx={{d.month[i].idx}}>{{d.month[i].text}}</option>
                            {{# } }}
                        {{# } }}
                    </select>
                    <select opt="head_year">
                        {{# for(var i=0;i<d.year.length;i++){ }}
                            {{# if(d.computeY == d.year[i].text){ }}
                                <option selected idx={{d.year[i].idx}}>{{d.year[i].text}}</option>
                            {{# }else{ }}
                                <option idx={{d.year[i].idx}}>{{d.year[i].text}}</option>
                            {{# } }}

                        {{# } }}
                    </select>
                </div>
                <span opt="right" class="fa fa-arrow-right ml30 c_13"></span>
                <div opt="calendarWeek" class="pt10">
                    {{# for(var i=0;i<d.dateHead.length;i++){ }}
                        <span class="m0lr5 fwb">{{d.dateHead[i]}}</span>
                    {{# } }}
                </div>
            </div>
         */
    }
View Code

 

写的比较久,也比较烂。。。

转载于:https://www.cnblogs.com/lv-sally/p/5659101.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值