JS 학습 의 간단 한 달력 컨트롤
이러한 달력 컨트롤 은 실현 하기 어렵 지 않 습 니 다.다음은 제 생각 을 간단하게 분석 하 겠 습 니 다.
우선,이 컨트롤 의 설정 가능 한 항목 입 니 다.
...
settings:
{
firstDayOfWeek: 1,
baseClass: "calendar",
curDayClass: "curDay",
prevMonthCellClass: "prevMonth",
nextMonthCellClass: "nextMonth",
curMonthNormalCellClass: "",
prevNextMonthDaysVisible: true
},
...
weekDayNames: [],
...
그 중 절반 은 셀 스타일 을 제어 하 는 데 사 용 됩 니 다(너무 많은 설명 을 하지 않 음).다른 몇 개(firstDay of Week,prev NextMonth Day Visible,week Day Names)의 의 미 는 다음 과 같 습 니 다. 달력 prevNextMonthDaysVisible:이 달 이외 의 날 짜 를 표시 할 지 여부 week Day Names:요일 의 이름(색인 이 1 에서 시 작 된 배열,1 곳 의 값 은 월요일 의 디 스 플레이 이름 으로 추 정 됩 니 다) 다음은 html 코드 생 성 단계 에 들 어 갑 니 다: 1.달력 헤더 생 성:
_RenderTitle: function(month, year) {
var ht = [];
//
ht.push("<tr>");
ht.push("<th colspan='7' style='width:100%;'><div style='float:left;width:10%;text-align:center;' id='", this.containerId, "_prevMonth' title=' '><</div><div style='float:left;text-align:center;width:80%'>", year, " ", month, " </div><div style='float:right;width:10%; text-align:center;' id='", this.containerId, "_nextMonth' title=' '>></div></th>");
ht.push("</tr>");
//
ht.push("<tr>");
for (var i = 0; i < 7; i++) {
var day = (i + this.settings.firstDayOfWeek) == 7 ? 7 : (i + this.settings.firstDayOfWeek) % 7;
ht.push("<th>", this.weekDayNames[day], "</th>")
}
ht.push("</tr>");
return ht.join("");
},
날짜 부분 은'단추'를 조작 하 는 id 로 달력 컨트롤 용기 의 id 를 접두사 로 사용 하여 id 가 유일 하도록 합 니 다. 요일 부분 은 first Day of Week 설정 에 따라 week Day Name 을 가 져 옵 니 다.여기 서 관건 은 모든 단원 격 이 무슨 요일 을 대표 하 는 지 판단 하 는 것 이다.생각 은 매우 간단 하 다. var day = (i + this.settings.firstDayOfWeek) == 7 ? 7 : (i + this.settings.firstDayOfWeek) % 7; 이렇게 하면 현재 단원 격 대표 의 주 를 얻 을 수 있다. 2.달력 생 성 주요 부분:
_RenderBody: function(month, year) {
var date = new Date(year, month - 1, 1);
var day = date.getDay();
var dayOfMonth = 1;
var daysOfPrevMonth = (7 - this.settings.firstDayOfWeek + day) % 7;
var totalDays = this._GetTotalDays(month, year);
var totalDaysOfPrevMonth = this._GetToalDaysOfPrevMonth(month, year);
var ht = [];
var curDate;
for (var i = 0; ; i++) {
curDate = null;
if (i % 7 == 0) {//
ht.push("<tr>");
}
ht.push("<td");
if (i >= daysOfPrevMonth && dayOfMonth <= totalDays) {//
curDate = new Date(year, month - 1, dayOfMonth);
if (Date.parse(new Date().toDateString()) - curDate == 0) {
ht.push(" class='", this.settings.curDayClass, "'");
}
else {
ht.push(" class='", this.settings.curMonthNormalCellClass, "'");
}
dayOfMonth++;
}
else if (i < daysOfPrevMonth) {//
if (this.settings.prevNextMonthDaysVisible) {
var prevMonth = month;
var prevYear = year;
if (month == 1) {
prevMonth = 12;
prevYear = prevYear - 1;
}
else {
prevMonth = prevMonth - 1;
}
curDate = new Date(prevYear, prevMonth - 1, totalDaysOfPrevMonth - (daysOfPrevMonth - i - 1));
ht.push(" class='", this.settings.prevMonthCellClass, "'");
}
}
else {//
if (this.settings.prevNextMonthDaysVisible) {
var nextMonth = month;
var nextYear = year;
if (month == 12) {
nextMonth = 1;
nextYear = prevYear + 1;
}
else {
nextMonth = nextMonth + 1;
}
curDate = new Date(nextYear, nextMonth-1, i - dayOfMonth - daysOfPrevMonth + 2);
ht.push(" class='", this.settings.nextMonthCellClass, "'");
}
}
ht.push(">");
ht.push(this._BuildCell(curDate));
ht.push("</td>");
if (i % 7 == 6) {//
ht.push("</tr>");
}
if (i % 7 == 6 && dayOfMonth - 1 >= totalDays) {
break;
}
}
return ht.join("");
},
(1).이 달 1 일 을 가 져 오 는 것 은 무슨 요일 을 의미 합 니까?이렇게 해야만 1 호가 어느 칸 에 넣 어야 하 는 지,즉 이 달 에 어느 칸 부터 시작 해 야 하 는 지 판단 할 수 있다. (2).이 달 날짜 표시 영역 을 제어 하기 위해 표지 변 수 를 정의 합 니 다. (3).전시 할 지난달 의 일수 와 지난달 의 총 일 수 를 계산 합 니 다(다음 달 전시 할 일수 와 총 일 수 는 계산 하지 않 아 도 됩 니 다.다음 달 전시 할 날 짜 는 1 부터 최대 6 을 초과 하지 않 기 때 문 입 니 다). (4).이 달의 날짜 표시: 조건 i>=days of PreventMonth&&&dayOf Month<=totalDays 가 이 달 날짜 의 표시 영역 을 결정 합 니 다. (5).지난달 날짜 표시: i
if (i % 7 == 6 && dayOfMonth - 1 >= totalDays) {
break;
}
i%7==6 은 한 줄 이 끝 났 음 을 나타 내 고,dayOFMonth-1>=totalDays 는 이 달 날짜 가 전 시 됐 음 을 나타 낸다. (8).구조 curDate:curDate 는 각 칸 에 대응 하 는 날 짜 를 대표 합 니 다.이 달 날 짜 를 표시 할 때 curDate=new Date(year,month-1,dayOf Month);지난달 날 짜 를 표시 할 때 curDate=new Date(prevYear,prevMonth-1,totalDaysOf PrevMonth-(daysOf PrevMonth-i-1);다음 달 날 짜 를 표시 할 때 curDate=new Date(nextYear,nextMonth-1,i-dayof Month-days of PreventMonth+2),더하기 2 는 i 가 0 부터 시작 되 었 기 때문에 그 자체 가 1 이 적 었 고,dayof Month 는 이 달 날 짜 를 표시 할 때 한 번 더 추 가 했 습 니 다. 마지막 으로 다시 보 자BuildCell 은 무슨 일 을 했 습 니까?
_BuildCell: function(curDate) {
var ht = [];
if (curDate) {
for (var j = 0; j < this.dateLinkMappings.length; j++) {
if (Date.parse(this.dateLinkMappings[j].Date) - curDate == 0) {
ht.push("<a href='", this.dateLinkMappings[j].Link, "'>", curDate.getDate(), "</a>");
break;
}
}
if (j == this.dateLinkMappings.length) {
ht.push(curDate.getDate());
}
}
else {
ht.push(" ");
}
return ht.join("");
},
사실 이 달력 컨트롤 의 의 도 는 사용자 가 초기 화 할 때 날짜 와 이 날짜 에 대응 하 는 링크 의 맵 을 입력 할 수 있 는 배열 입 니 다.즉,this.dateLink Mappings 입 니 다.셀 을 구축 할 때 구축 중인 날짜 가 this.dateLink Mappings 에 포함 되면 현재 셀 을형식 으로 구성 합 니 다.그렇지 않 으 면 일반적인 텍스트 형식 입 니 다. OK,실현 논 리 는 대체적으로 이와 같 습 니 다.마지막 으로 프레젠테이션 효 과 를 보십시오.프론트 데스크 톱 호출 코드 는 다음 과 같 습 니 다. var date = new Date(); var mapping = []; mapping.push(new DateLinkMapping("3-22-2010", "javascript:alert(1)")); mapping.push(new DateLinkMapping("4-1-2010", "javascript:alert(1)")) Calendar.Init(null, mapping); Calendar.RenderCalendar("myCalendar", date.getMonth() + 1, date.getFullYear());패키지 다운로드 주소이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.