package utils
{
public class TimeAlarm
{
static private var _instance:TimeAlarm;//利用單例形式
private var _timeSourceFunc:Function;
/**
*鬧鈴辦理器
*
*/
public function TimeAlarm()
{
if(_instance!=null)
throw "TimeAlarm is single instance class."
}
static public function get instance():TimeAlarm
{
if(_instance==null)
{
_instance = new TimeAlarm();
}
return _instance;
}
/**
*正在幀輪迴中挪用
* @param time
*
*/
public function alarmTick(time:Number=NaN):void
{
var date:Date;
var day:int;
if(isNaN(time)==true)
{
date = new Date();
}else{
date = new Date(time);
}
var monthly_key:String = "";
var weekly_key:String = "";
var daily_key:String = "";
//每個月 鍵值
if(date.month<9)
{
monthly_key += "0";
}
monthly_key += String(date.month+1);
if(date.date<10)
{
monthly_key += "0";
}
monthly_key += String(date.date);
//每週 鍵值
if(date.day==0)
{
monthly_key = monthly_key + "07";
weekly_key = weekly_key + "07";
day = 7;
}else{
monthly_key = monthly_key + "0" + String(date.day);
weekly_key = weekly_key + "0" + String(date.day);
day = date.day;
}
//每時 鍵值
if(date.hours<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key += String(date.hours);
weekly_key += String(date.hours);
daily_key += String(date.hours);
if(date.minutes<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.minutes);
weekly_key +=String(date.minutes);
daily_key +=String(date.minutes);
if(date.seconds<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.seconds);
weekly_key +=String(date.seconds);
daily_key +=String(date.seconds);
if(_alarms!=null)
{
var type_alarms:Array;
var final_key:String;
for (var type:String in _alarms)
{
type_alarms = _alarms[type];
switch(int(type))
{
case ALARM_WEEKLY:
{
final_key = weekly_key;
break;
}
case ALARM_DAiLY:
{
final_key = daily_key;
break;
}
}
var alarm:Object;
var alarms:Array;
//正面提示
for (var k:String in type_alarms)
{
alarms = type_alarms[k];
if(k==final_key)
{
for each(alarm in alarms)
{
if(alarm.alarm is Function)
{
alarm.alarm(alarm);
alarm.alarmed = true;
}
}
}else{
for each(alarm in alarms)
{
//超出正面,可是借正在範疇內
if(alarm.range!=null && alarm.alarmed==false)
{
//先只算周提示的
if((alarm.w==null || alarm.w==day) && alarm.h==date.hours)//
{
var end_min:int = int(alarm.min)+int(alarm.range);
var start_min:int = int(alarm.min);
var start_s:int = int(alarm.s);
var in_range:Boolean = false;
if(end_min>date.minutes)//完畢時間比當前時間早
{
if(start_min==date.minutes)//假如恰好是開端妨魁
{
if(start_s<date.seconds)//吭喲是否是當前時間過了正面
{
in_range = true;
}
}else if(start_min<date.minutes)//假如過了開端妨魁
{
in_range = true;
}
}else if(end_min==date.minutes)//假如當前時間遇上告終束時間
{
if(start_s>date.seconds)//秒數借正在範疇內
{
in_range = true;
}
}
if(in_range==true)
{
alarm.alarmed = true;
alarm.alarm(alarm);
}
}
}
}
}
}
}
}
}
private const KEYS:Array = ["m", "d", "w", "h", "min", "s"];
//類型戰KEYS裏的屬性索引是洞喀的
private const ALARM_WEEKLY:int = 2;//每週
private const ALARM_DAiLY:int = 3;//逐日
private var _alarms:Array;
/**
* @param alarm {m:1~12, d:1~31, w:1~7, h:0~23, min:0~60, s:0~60, range:xx, alarm:call back function } 各自意義 月 日 周(1~7) 時 分 秒
* range:{min:0<=min<60; s:0<=s<60} 從肇端時間開端,指按時間範疇內皆有用,單元分;alarm:回調函數
*
*/
public function addAlarm(alarm:Object):void
{
var alarm_type:int = -1;
//那裏的判斷要從年夜到小,好比擴展了每個月類型的便要先判兌,逆序胰ノ是 每一年>每個月>每週>天天
if(alarm.hasOwnProperty("w")==true && alarm.w>0)
{
alarm_type = ALARM_WEEKLY;
}else if(alarm.hasOwnProperty("h")==true)
{
alarm_type = ALARM_DAiLY;
}
if(alarm_type>=0)
{
formatAlarm(alarm, alarm_type);
}
}
private function formatAlarm(alarm:Object, alarmType:int):void
{
var finale_key:String = "";
for(var i:int = alarmType; i < KEYS.length; ++i)
{
var key:String = KEYS[i];
if(alarm[key]!=null)
{
if(alarm[key]<10)
{
finale_key += "0";
}
finale_key += String(alarm[key]);
}else{
finale_key += "00";
}
}
if(_alarms==null)
{
_alarms = new Array();
}
if(_alarms[alarmType]==null)
{
_alarms[alarmType] = new Array();
}
if(_alarms[alarmType][finale_key]==null)
{
_alarms[alarmType][finale_key] = new Array();
}
alarm.alarmed = false;
_alarms[alarmType][finale_key].push(alarm);
}
}
}
AS3單例形式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
FSCommand函數用法(三)
iteye_17726
2018-08-27 17:28:55
FSCommand函數用法(一)
iteye_17726
2018-08-27 17:28:54
FSCommand函數用法(四)
iteye_17726
2018-08-27 17:28:54
FSCommand函數用法(二)
iteye_17726
2018-08-27 17:28:54
AS3 Socket 漢字亂碼深入研究
iteye_17726
2018-08-27 17:28:53
AS3與.net之間的Socket編碼轉換的endian問題
iteye_17726
2018-08-27 17:28:53
Flex 代碼控制圖片繪製
iteye_17726
2018-08-27 17:28:53
用鼠標拖動圖形拼圖——灰常簡單的教程
ufodsyfaa
2018-08-27 10:50:09
AS3 Socket從零開始。
ufodsyfaa
2018-08-27 10:50:08
如何學flex/AS3?
ufodsyfaa
2018-08-27 10:50:08
ActionScript通用開發框架
ufodsyfaa
2018-08-27 10:50:07
AS3適用函數、AS3經常使用算法年夜齊
ufodsyfaa
2018-08-27 10:50:03
Flash/AS3與C++通過socket通信
ufodsyfaa
2018-08-27 10:50:02