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);
}
}