首頁 web前端 js教程 js日历功能对象_javascript技巧

js日历功能对象_javascript技巧

May 16, 2016 pm 05:57 PM
日曆

需求产生问题:本来想在网上找个js代码,可是发现要么太复杂,要么不好控制,要么兼容性不好......
问题分析: 发现不是优秀的就是最好的.... 适合自己的就是最好的。
问题解决: 决定自己写一个日历 功能。
代码呈现:
日历主程序

复制代码 代码如下:

var calendar={
STR:function(){with(this.data)return ""+Y+"年,"+M+"月,"+D+"号,星期"+WN[W];},
V:function(o,spli,sx){with(this)return o[sx]=""+data.Y+spli+data.M+spli+data.D},
T:function(){with(this)return data.TABLE},
dnY:function(){with(this){calendarChange(data.Y+1,data.M-1,data.D)}},
dnM:function(){with(this){calendarChange(data.Y,data.M,data.D)}},
upY:function(){with(this){calendarChange(data.Y-1,data.M-1,data.D)}},
upM:function(){with(this){calendarChange(data.Y,data.M-2,data.D)}},
day:function(o){with(this){data.D=o;calendarChange(data.Y,data.M-1,data.D)}},
data:{Y:null,M:null,D:null,W:null,H:null,U:null,YMD:null,YMD_C:"hot",ARR:null,TABLE:null,MN:null,WN:null,SELECT:null,TADAY:new Date(),TADAY_C:"taday",ROWLEN:7,VALUE:null},
creatTable:function(){with(this){
var table=""
for(var i=0;i"+t+"";}
for(var i in data.ARR){var showText=data.ARR[i]||" ",br=i%data.ROWLEN,title,css;
if(!br){table+="
"};
data.ARR[i]?title=data.Y+"-"+data.M+"-"+showText:title="";
String(data.TADAY.getDate())==String(data.ARR[i])?
(data.YMD.getFullYear()==data.TADAY.getFullYear()&&data.YMD.getMonth()==data.TADAY.getMonth()&&data.YMD.getDate()==data.TADAY.getDate())?
css=data.TADAY_C+" "+data.YMD_C:css=data.YMD_C:css="";
table+="";
}table+="
"+showText+"
"
data.TABLE=table;return table;
}},
calendarStarArr:function(userY,userM,userD){with(this){
var Arr=[];
var now = new Date(userY,userM,userD);
var LastDay = now.getLastDay();
var FirstDayofWeek = now.FirstDayofWeek();
data.YMD=now;data.Y=now.getFullYear();
data.M=now.getMonth()+1;data.D=now.getDate();data.W=now.getDay();
while(Arr.length!=FirstDayofWeek){Arr.push(false)}
for(var i=0;iwhile(Arr.length%data.ROWLEN!=0){Arr.push(false)}
data.ARR=Arr;return Arr;
}},
calendarChange:function(userY,userM,userD){with(this){
calendarStarArr(userY,userM,userD);creatTable()
}},
calendarStar:function(userY,userM,userD){with(this){
data.MN = ["零","一","二","三","四","五","六","七","八","九","十","十一","十二"];
data.WN = ["日","一","二","三","四","五","六"];
calendarChange(userY,userM,userD);
}},
init:function(){with(this){
Date.prototype.getLastDay=function(){return(new Date(this.getFullYear(),this.getMonth()+1,0).getDate())}
Date.prototype.FirstDayofWeek=function(){return(new Date(this.getFullYear(),this.getMonth(),1).getDay())}
calendarStar(new Date().getFullYear(),new Date().getMonth(),new Date().getDate())
}}
}

代码应用讲解:
复制代码 代码如下:

var aa=new calendar()//创建一个新日历
aa.init()//日历初始

复制代码 代码如下:

obj.innerHTML=aa.STR()//显示日期字符串
obj.innerHTML=aa.T()//显示表格
aa.dnY()//下一年
aa.upY()//上一年
aa.dnM()//下一月
aa.upM()//上一月
aa.day(Number)//改变日历显示的几号(Number 需要传一个数值型参数)

这个日历对象实现的是日历的核心功能功能,
具体是日历放在哪里,
哪个事件触发哪个函数这个我没有写,
要是那样的话就失去我写这个日历的原有目的了。
怎么大家都没反应,我弄个例子,大家看下吧
复制代码 代码如下:




js日历效果-wangzf


<script> <BR>var calendar={ <BR>STR:function(){with(this.data)return ""+Y+"年,"+M+"月,"+D+"号,星期"+WN[W];}, <BR>V:function(spli){with(this)return ""+data.Y+spli+data.M+spli+data.D}, <BR>T:function(){with(this)return data.TABLE}, <BR>dnY:function(){with(this){calendarChange(data.Y+1,data.M-1,data.D)}}, <BR>dnM:function(){with(this){calendarChange(data.Y,data.M,data.D)}}, <BR>upY:function(){with(this){calendarChange(data.Y-1,data.M-1,data.D)}}, <BR>upM:function(){with(this){calendarChange(data.Y,data.M-2,data.D)}}, <BR>day:function(o){with(this){data.D=o;calendarChange(data.Y,data.M-1,data.D)}}, <BR>data:{Y:null,M:null,D:null,W:null,H:null,U:null,YMD:null,YMD_C:"hot",ARR:null,TABLE:null,MN:null,WN:null,SELECT:null,TADAY:new Date(),TADAY_C:"taday",ROWLEN:7,VALUE:null}, <BR>creatTable:function(){with(this){ <BR>var table="<table height=100% width=100%><tr>" <BR>for(var i=0;i<data.ROWLEN;i++){var t=data.WN[i]||" ";table+="<th>"+t+"";} <BR>for(var i in data.ARR){var showText=data.ARR[i]||" ",br=i%data.ROWLEN,title,css=""; <BR>if(!br){table+="<tr>"}; <BR>data.ARR[i]?title=data.Y+"-"+data.M+"-"+showText:title=""; <BR>if(String(data.D)==String(data.ARR[i])){css+=" "+data.YMD_C;} <BR>if(data.YMD.getFullYear()==data.TADAY.getFullYear()&&data.YMD.getMonth()==data.TADAY.getMonth()&&String(data.TADAY.getDate())==String(data.ARR[i])){css=" "+data.TADAY_C} <BR>table+="<td title='"+title+"' class="+css+">"+showText+""; <BR>}table+="" <BR>data.TABLE=table;return table; <BR>}}, <BR>calendarStarArr:function(userY,userM,userD){with(this){ <BR>var Arr=[]; <BR>var now = new Date(userY,userM,userD); <BR>var LastDay = now.getLastDay(); <BR>var FirstDayofWeek = now.FirstDayofWeek(); <BR>data.YMD=now;data.Y=now.getFullYear(); <BR>data.M=now.getMonth()+1;data.D=now.getDate();data.W=now.getDay(); <BR>while(Arr.length!=FirstDayofWeek){Arr.push(false)} <BR>for(var i=0;i<LastDay;i++){Arr.push(i+1)} <BR>while(Arr.length%data.ROWLEN!=0){Arr.push(false)} <BR>data.ARR=Arr;return Arr; <BR>}}, <BR>calendarChange:function(userY,userM,userD){with(this){ <BR>calendarStarArr(userY,userM,userD);creatTable() <BR>}}, <BR>calendarStar:function(userY,userM,userD){with(this){ <BR>data.MN = ["零","一","二","三","四","五","六","七","八","九","十","十一","十二"]; <BR>data.WN = ["日","一","二","三","四","五","六"]; <BR>calendarChange(userY,userM,userD); <BR>}}, <BR>init:function(){with(this){ <BR>Date.prototype.getLastDay=function(){return(new Date(this.getFullYear(),this.getMonth()+1,0).getDate())} <BR>Date.prototype.FirstDayofWeek=function(){return(new Date(this.getFullYear(),this.getMonth(),1).getDay())} <BR>calendarStar(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()) <BR>}} <BR>} <BR></script>



















<script> <BR>calendar.init() <BR>function calendarChange(){ <BR>var calendar_body=document.getElementById("calendar_body") <BR>calendar_body.innerHTML=calendar.T()//显示表格 <BR>var calendar_str=document.getElementById("calendar_str") <BR>calendar_str.innerHTML=calendar.STR()//显示日期字符串 <BR>calendarControl()//调用日历控制 <BR>} <BR>calendarChange()//日历更新 <BR>function calendarControl(){ <BR>var calendar_str=document.getElementById("calendar_str") <BR>calendar_str.onclick=function(){ calendar.init();calendarChange()}//返回今天功能实现 <BR>var calendar_dnY=document.getElementById("calendar_dnY") <BR>calendar_dnY.onclick=function(){ calendar.dnY();calendarChange()}//下一年 功能实现 <BR>var calendar_dnM=document.getElementById("calendar_dnM") <BR>calendar_dnM.onclick=function(){ calendar.dnM();calendarChange()}//下一月 功能实现 <BR>var calendar_upY=document.getElementById("calendar_upY") <BR>calendar_upY.onclick=function(){ calendar.upY();calendarChange()}//上一年 功能实现 <BR>var calendar_upM=document.getElementById("calendar_upM") <BR>calendar_upM.onclick=function(){ calendar.upM();calendarChange()}//上一月 功能实现 <BR>var calendar_day=document.getElementById("calendar_body").getElementsByTagName("td"); <BR>for(var i in calendar_day){calendar_day[i].onclick=function(){var N=Number(this.innerText);if(N){calendar.day(N);calendarChange()}}}//当天日期 功能实现 <BR>} <BR></script>


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win11雙螢幕行事曆在第二台顯示器上不存在怎麼辦? win11雙螢幕行事曆在第二台顯示器上不存在怎麼辦? Jun 12, 2024 pm 05:47 PM

在Windows11中組織日常工作和例行公事的重要工具是在工作列中顯示時間和日期。此功能通常位於螢幕的右下角,可讓您即時存取時間和日期。透過點擊此區域,您可以調出日曆,從而更輕鬆地檢查即將到來的約會和日期,而無需打開單獨的應用程式。但是,如果您使用多個顯示器,則此功能可能會遇到問題。具體來說,雖然時鐘和日期顯示在所有連接的顯示器上的任務欄上,但點擊第二個顯示器上的日期和時間來顯示日曆的功能不可用。截至目前,此功能僅在主顯示幕上起作用-它與Windows10不同,在Windows10中,按一下任

win10日曆顯示週數 win10日曆顯示週數 Jan 04, 2024 am 08:41 AM

很多用戶想要透過win10日曆這個工具來查看當前天數,但是日曆不會自動顯示這一功能,其實我們只需要通過簡單的設置,就能夠看到今年的累計週數了哦~win10日曆顯示週數設定教學:1、在桌面左下角的搜尋中輸入日曆並且開啟應用程式。 2.在開啟的日曆應用程式中,點擊左下角的「齒輪」圖示後,會在右側彈出設置,我們點擊「日曆設定」3、繼續在開啟的日曆設定中,找到「週數」然後將週數選項調整到“一年中的第一天”即可。 4.在完成以上設定後,點擊「週」即可看到今年的周數統計了。

Outlook行事曆不同步; Outlook行事曆不同步; Mar 26, 2024 am 09:36 AM

如果您的Outlook行事曆無法與Google行事曆、Teams、iPhone、Android、Zoom、Office帳號等同步,請執行下列步驟來解決問題。日曆應用程式可以連接到其他日曆服務,例如Google日曆、iPhone、安卓、微軟Office365等,這是非常有用的,因為它可以自動同步。但如果OutlookCalendar無法與第三方日曆同步怎麼辦?可能的原因可能是選擇錯誤的日曆進行同步,日曆不可見,後台應用程序幹擾,過時的Outlook應用程序或日曆應用程序,等等。修復Outlook日曆不同步的初步

無法開啟win10右下角的行事曆 無法開啟win10右下角的行事曆 Dec 26, 2023 pm 05:07 PM

有使用win0系統的小夥伴有遇見win10日曆打不開的情況,這個是正常的電腦的小故障而已,在win10系統的隱私設定裡可以解決,今天小編帶來了詳細的解決方法,下面大家一起來看看吧。 win10右下角的行事曆打不開解決方法1、在win10系統中點選開始→點擊上方的程式清單按鈕→往下找到拼音(中文)R→行事曆2、初次使用,可能新事件會點不開(滑鼠靠上去,不會有選取的深藍色),可以在隱私中設定一下。點擊桌面左上方的三道槓圖示→底部就會有設定選單;3、在彈出的介面中點擊隱私;4、如果之前使用過設置,可以點擊左

win10日曆事件沒有彈跳窗提醒怎麼辦?win10日曆事件提醒沒了的恢復方法 win10日曆事件沒有彈跳窗提醒怎麼辦?win10日曆事件提醒沒了的恢復方法 Jun 09, 2024 pm 02:52 PM

行事曆可以幫助使用者記錄你的行程,甚至可以設定提醒,但是也有不少的使用者在詢問win10行事曆事件提醒不彈出怎麼辦?使用者可以先檢查windows更新狀況或是清除windows應用程式商店快取來進行操作就可以了。以下就讓本站來為使用者來仔細的介紹一下win10日曆事件提醒不彈出問題解析吧。新增日曆事件在系統選單中點選「日曆」程式。滑鼠左鍵點擊日曆中的日期。在編輯視窗輸入事件名稱和提醒時間,點選「儲存」按鈕即可新增事件了。 win10日曆事件提醒不彈出問題解決

無期迷途採購辦:日曆和生日系列週邊上新! 無期迷途採購辦:日曆和生日系列週邊上新! Feb 29, 2024 pm 12:00 PM

無期迷途採購辦確定將於2月28日上午11點更新,玩家可以前往淘寶搜尋無期迷途採購辦選擇店鋪分類進行購買,本次為大家帶來的是MBCC生日會系列及2024台歷週邊,一起來看看本次的商品詳情。無期迷途採購辦:日曆和生日系列週邊上新!無期迷途採購辦上新! —預售時間:2024年2月28日11:00-2024年3月13日23:59採購地​​址:淘寶搜尋【無期迷途採購辦】選擇【店鋪】分類即可進店採購;週邊介紹:本次週邊上新為MBCC生日會系列及2024台歷週邊,請點選長圖查閱詳情。採購辦上新周邊介紹—MBCC生

win11時間老是不準確怎麼解決? Win11時間調整教學快速解決時間不準確問題 win11時間老是不準確怎麼解決? Win11時間調整教學快速解決時間不準確問題 Apr 19, 2024 am 09:31 AM

如果您的Windows11電腦顯示時間錯誤,可能會導致許多問題,甚至阻止您連接到網路。事實上,當系統顯示不正確的日期和時間時,某些應用程式會拒絕開啟或執行。那麼應該如何解決這個問題呢?下面一起來看看吧!方法一:1、我們先右鍵點選下方任務欄空白處,選擇工作列設定2、在工作列設定中找到右側的taskbarcorneroverflow3、然後在它上方找到clock或時鐘選擇開啟即可。方法二:1.按下鍵盤快速鍵win+r調出運行,輸入regedit回車確定。 2、開啟登錄編輯器,在其中找到HKEY

如何阻止Outlook自動將事件新增到我的日曆 如何阻止Outlook自動將事件新增到我的日曆 Feb 26, 2024 am 09:49 AM

作為電子郵件管理器應用程序,MicrosoftOutlook允許我們安排活動和約會。它透過提供在Outlook應用程式中建立、管理和追蹤這些活動(也稱為事件)的工具,使我們能夠保持有序。然而,有時會將不需要的事件加入Outlook中的日曆中,這會對使用者造成混亂,並向日曆發送垃圾郵件。在本文中,我們將探討可協助我們防止Outlook自動將事件新增至我的日曆中的各種方案和步驟。 Outlook活動-簡要概述Outlook事件具有多種用途,並具有許多有用的功能,具體如下:日曆整合:在Outlook

See all articles