Skip to content

Instantly share code, notes, and snippets.

@aoirint
Last active June 17, 2017 02:57
Show Gist options
  • Save aoirint/eeec07f2a597b39b939ed265bdbc3e2c to your computer and use it in GitHub Desktop.
Save aoirint/eeec07f2a597b39b939ed265bdbc3e2c to your computer and use it in GitHub Desktop.
Ver.4 実行月の日曜始まり5週カレンダーを出力するJS / カレンダープロトタイプ化、クリックイベント
<!DOCTYPE html>
<script src="Calendar.js"></script>
<script>
var today = new Date();
var calendar = new Calendar(today.getFullYear(), today.getMonth()+1, today.getDate()/7);
calendar.addEventListener('click', function(date) { console.log(date); });
window.onload = function() {
var dom = calendar.createTableDOM();
document.body.appendChild(dom);
};
</script>
var Calendar = function(year, month, baseWeek, amplitude) {
if (amplitude == undefined) amplitude = 2;
var weeks = [];
var weekCount = amplitude*2 +1;
for (var i=0; i<weekCount; i++) {
var week = [];
var weekI = baseWeek +i-amplitude;
var weekTop = new Date(year, month-1, 7*(weekI-1)+1);
for (var j=0; j<7; j++) {
week[j] = new Date(weekTop.getFullYear(), weekTop.getMonth(), weekTop.getDate() +j);
}
weeks[i] = week;
}
this.weeks = weeks;
this.amplitude = amplitude;
this.weekCount = weekCount;
};
Calendar.prototype.addEventListener = function(name, listener) {
if (this.eventListeners == undefined)
this.eventListeners = {};
if (this.eventListeners[name] == undefined)
this.eventListeners[name] = [];
this.eventListeners[name][this.eventListeners[name].length] = listener;
};
Calendar.prototype.triggerEvent = function(name, obj) {
if (this.eventListeners != undefined && this.eventListeners[name] != undefined) {
for (var i=0, len=this.eventListeners[name].length; i<len; i++) {
this.eventListeners[name][i](obj);
}
}
};
Calendar.prototype.createTableDOM = function() {
var table = document.createElement('table');
for (var i=0; i<this.weekCount; i++) {
var weektr = document.createElement('tr');
for (var j=0; j<7; j++) {
var datetd = document.createElement('td');
var date = this.weeks[i][j];
var mn = date.getMonth() +1;
if (mn < 10) mn = '0' + mn;
var dt = date.getDate();
if (dt < 10) dt = '0' + dt;
datetd.dataset.date = date.getFullYear() + '-' + mn + '-' + dt;
datetd.innerText = date.getDate();
(function() {
var cl = calendar;
var cache = date;
datetd.addEventListener('click', function() { cl.triggerEvent('click', cache); });
})();
weektr.appendChild(datetd);
}
table.appendChild(weektr);
}
return table;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment