白鹭日期选择器

  

class DatePickerView extends ViewBase {
	public btn_close:eui.Button;
	public txt_month:eui.Label;
	public txt_year:eui.Label;
	public btn_pull:eui.Button;
	public img_jian:eui.Image;

	public v_view:eui.ViewStack;

	public btn_left:eui.Button;
	public btn_right:eui.Button;
	public g_month_list:eui.Group;
	public g_yera_list:eui.Group;
	
	private month_toggle_arr:Array<eui.ToggleButton> = [];
	private year_toggle_arr:Array<eui.ToggleButton> = [];

	private show_year_num:number;
	private years:Array<number> = [];
	private months:Array<string> = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	private current_year:number;
	private current_month:number;
	private current_day:number;
	private current_target:number;
	
	public constructor() {
		super();
		this.skinName = "resource/skins/module/yydb/ui/yydb_date_picker.exml";
		this.currentState = Main.lang;
		this.addEventListener(eui.UIEvent.CREATION_COMPLETE, this.createCompleteEvent, this);
	}

	public createCompleteEvent(event: eui.UIEvent): void {
		this.removeEventListener(eui.UIEvent.CREATION_COMPLETE, this.createCompleteEvent, this);
		this.btn_close.addEventListener(egret.TouchEvent.TOUCH_TAP, this.hidePickerView, this);
		this.btn_pull.addEventListener(egret.TouchEvent.TOUCH_TAP, this.showYearView, this);
		this.btn_left.addEventListener(egret.TouchEvent.TOUCH_TAP, this.setLast, this);
		this.btn_right.addEventListener(egret.TouchEvent.TOUCH_TAP, this.setNext, this);
		
		for (let i: number = 0; i < this.g_month_list.numChildren; i++){
			this.month_toggle_arr[i] = <eui.ToggleButton>this.g_month_list.getChildAt(i);
			this.month_toggle_arr[i].addEventListener(egret.TouchEvent.TOUCH_TAP, this.hidePickerView, this);
		}

		for (let i: number = 0; i < this.g_yera_list.numChildren; i++){
			this.year_toggle_arr[i] = <eui.ToggleButton>this.g_yera_list.getChildAt(i);
			this.year_toggle_arr[i].addEventListener(egret.TouchEvent.TOUCH_TAP, this.hideYearView, this);
		}

		this.show_year_num = this.g_yera_list.numChildren;
	}

	public showPickerView(target:number){
		this.visible = true;  
		this.v_view.selectedIndex = 0;
		this.img_jian.rotation = 0;
		this.current_target = target;

		this.getCurrentDate();
		this.setDate(this.current_month, this.current_year, this.current_day);
		for (let i: number = this.current_year - this.show_year_num + 1, j:number = 0; i <= this.current_year; i++, j++){
			this.years[j] = i;
			this.year_toggle_arr[j].label = i.toString();
		}
	}
	
	public hidePickerView(evt: egret.TouchEvent){	
		this.v_view.selectedIndex = 0;
		this.img_jian.rotation = 0;
		this.visible = false;

		if (this.btn_close == evt.currentTarget){		
			return;
		}

		let data:any = {};
		data["target"] = this.current_target;
		this.current_day = parseInt((<eui.ToggleButton>evt.currentTarget).label);
		data["time"] = this.current_year + "-" + (this.current_month + 1) + "-" + this.current_day;
		this.dispatchEvent(new DataEvent(DataEvent.EVENT_SELECT, data));
	}

	private showYearView(){
		if (this.v_view.selectedIndex == 0){
			this.v_view.selectedIndex = 1;
			this.img_jian.rotation = 180;
			this.selectedYear(this.current_year);
		} else {
			this.v_view.selectedIndex = 0;
			this.img_jian.rotation = 0;
		}	
	}

	private hideYearView(evt: egret.TouchEvent){
		this.v_view.selectedIndex = 0;
		this.img_jian.rotation = 0;
		this.selectedYear(parseInt(evt.currentTarget.label));
		this.current_day = 1;
		this.setDate(this.current_month, this.current_year, this.current_day);
	}

	private selectedYear(year:number){
		for (let i: number = 0; i < this.year_toggle_arr.length; i++){
			if (parseInt(this.year_toggle_arr[i].label) == year){
				this.year_toggle_arr[i].selected = true;
			} else {
				this.year_toggle_arr[i].selected = false;
			}
		}

		this.current_year = year;
	}

	private setLast(){
		let year = this.current_year;
		let month = this.current_month - 1;
		if (month < 0) {
			year = year - 1;
			month = 11;
			if (year < this.years[0]){
				return;
			}
		}

		this.current_year = year;
		this.current_month = month;
		this.current_day = 1;
		this.setDate(this.current_month, this.current_year, this.current_day);
	}

	private setNext(){
		let year = this.current_year;
		let month = this.current_month + 1;
		if (month > 11) {
			year = year + 1;
			month = 0;
			if (year > this.years[this.years.length - 1]){
				return;
			}
		}

		this.current_year = year;
		this.current_month = month;
		this.current_day = 1;
		this.setDate(this.current_month, this.current_year, this.current_day);
	}

	private setDate(month, year, day){
		for (let i: number = 0; i < this.month_toggle_arr.length; i++){
			this.month_toggle_arr[i].visible = false;
		}

		this.txt_year.text = year.toString();
		this.txt_month.text = this.months[month];

		let week = this.getWeek(month, year);
		let days = this.getDays(month, year);

		let d = 1;
		for (let i: number = week; i < days + week; i++){
			let tog = this.month_toggle_arr[i];
			tog.visible = true;
			tog.label = d.toString();
			if (d == day){
				tog.selected = true;
			} else {
				tog.selected = false;
			}
			d++;
		}
	}

	private getCurrentDate(){
		let date = new Date();
		this.current_year = date.getFullYear();
      	this.current_month = date.getMonth();
      	this.current_day = date.getDate();
	}

	/** 每月多少天 */
	private getDays(month, year):number{
		let daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
		if (1 == month){
			return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28; 
		} else {
			return daysInMonth[month]; 
		}		
	}

	/** 每月1号周几 */
	private getWeek(month, year):number{
		let date = new Date(year, month, 1);
		return date.getDay();
	}

	public destory(){
		this.btn_close.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.hidePickerView, this);
		this.btn_pull.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.showYearView, this);
		this.btn_left.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.setLast, this);
		this.btn_right.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.setNext, this);

		for (let i: number = 0; i < this.month_toggle_arr.length; i++){
			this.month_toggle_arr[i].removeEventListener(egret.TouchEvent.TOUCH_TAP, this.hidePickerView, this);
		}

		for (let i: number = 0; i < this.year_toggle_arr.length; i++){
			this.year_toggle_arr[i].removeEventListener(egret.TouchEvent.TOUCH_TAP, this.hideYearView, this);
		}
	}
}
abstract class ViewBase extends eui.Component {
	public selectArr:Array<eui.ToggleButton> = [];
	public btn_select:eui.Button;
	public g_tog:eui.Group;

	public constructor() {
		super();
	}

	public showView(){

	}

	public destory(){
		
	}

	public initTextLang(){

	}

	public initSelectPanel(){
		this.btn_select.addEventListener(egret.TouchEvent.TOUCH_TAP, this.showTogPanel, this);

		let i = 0;
        while (this["selectBtn_" + i]) {
            this.selectArr[i] = this["selectBtn_" + i];
            this.selectArr[i].addEventListener(egret.TouchEvent.TOUCH_TAP, this.switchSelecView, this);
            i++;
        }
	}

	private showTogPanel(evt: egret.TouchEvent){
		YydbSound.playEffectOther();
		this.g_tog.visible = !this.g_tog.visible;
	}

	private switchSelecView(evt: egret.TouchEvent) {
		YydbSound.playEffectOther();
		for (let i = 0; i < this.selectArr.length; i++) {
            if (this.selectArr[i] == evt.currentTarget) {
                this.selectBtn(i);
                return;
            }
        }
	}

	public selectBtn(index: number){
		for (let i: number = 0; i < this.selectArr.length; i++) {
            this.selectArr[i].selected = (i == index);
		}
		this.btn_select.label = this.selectArr[index].label;
		this.g_tog.visible = false;
		this.selectFun(index);
	}

	public selectFun(index:number){

	}

	public sendLobbyMessage(proId: number, msg: BaseParse){
		LobbySocket.getInstance().sendMessageK(proId, msg);
	}

	public sendGameSocketMessage(proId: number, msg: BaseParse){
		GameSocket.getInstance().sendMessageK(proId, msg);
	}
}

使用:

public date_picker:DatePickerView;

this.date_picker.addEventListener(DataEvent.EVENT_SELECT, this.setTime, this);

this.btn_time0.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onTime, this);
this.btn_time1.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onTime, this);

private setTime(e:DataEvent){
	if (e.data["target"] == 0){
		this.btn_time0.label = e.data["time"];
	} else {
		this.btn_time1.label = e.data["time"];
	}	
}

private onTime(evt: egret.TouchEvent){
	if (this.btn_time0 == evt.currentTarget) {
		this.date_picker.showPickerView(0);
	} else {
		this.date_picker.showPickerView(1);
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值