javascript - 编写事件日历的第一步,从哪里开始?

标签 javascript php mysql calendar

<分区>

我正在自学一些核心网络技术,主要是 javascript php 和 mysql。我想创建一个将这三个联系在一起的事件日历。

我想我会用 javascript 绘制日历,然后使用 php 从 mysql 数据库添加事件。现在我想到的第一步是创建一个绘制日历的函数,然后我将使用 document.write 调用它。这是最合乎逻辑的方法吗?

最佳答案

这是您的开始:jsfiddle demo

在日期周围单击,您将看到选定 样式更改。

example

注意这取决于moment.js - 在 JavaScript 中处理日期/时间的基本库

样板 HTML

<ul id="calendar">
    <li><span>Sun</span></li>
    <li><span>Mon</span></li>
    <li><span>Tue</span></li>
    <li><span>Wed</span></li>
    <li><span>Thu</span></li>
    <li><span>Fri</span></li>
    <li><span>Sat</span></li>
</ul>

一些 CSS

#calendar {
    list-style-type: none;
    padding: 0;
    margin: 0;
}

#calendar li {
    float: left;
    width: 13%;
    margin: 0 1% 1% 0;
}

#calendar li span {
    display: block;
    padding: 5px;
    background-color: #eee;
}

#calendar li.selected span {
    font-weight: bold;
    text-decoration: underline;
}

#calendar li.today span {
    background-color: #33f;
    color: white;
}

#calendar li.offset-0 { margin-left: 0%; }
#calendar li.offset-1 { margin-left: 14%; }
#calendar li.offset-2 { margin-left: 28%; }
#calendar li.offset-3 { margin-left: 42%; }
#calendar li.offset-4 { margin-left: 56%; }
#calendar li.offset-5 { margin-left: 70%; }
#calendar li.offset-6 { margin-left: 84%; }

一点点 JavaScript

function Calendar(elem, date) {

    // private data variables
    var today = moment(date),
        first = moment(today).date(1);

    // private api
    function createDay(n) {
        var li = document.createElement("li"),
            span = document.createElement("span");

        span.innerHTML = n;
        li.appendChild(span);

        return li;
    }

    function addDay(n) {
        var li = createDay(n);
        if (n === 1) {
            li.classList.add("offset-" + first.day());
        }
        if (n === today.date()) {
            li.classList.add("today");
        }
        elem.appendChild(li);
    }

    function deselect(li) {
        if (!li) return;
        li.classList.remove("selected");
    }

    function select(li) {
        deselect(elem.querySelector(".selected"));
        li.classList.add("selected");
    }

    function onClick(event) {
        select(event.srcElement.parentNode);
        event.preventDefault();
    }

    // init
    for (var i=1, days = today.daysInMonth(); i<=days; i++) {
        addDay(i);
    }

    // event listeners
    elem.addEventListener("click", onClick);

}

你可以像这样使用Calendar

function init() {
  var cal = document.getElementById("calendar"),
      today = new Date;

  new Calendar(cal, today);
}

document.addEventListener("DOMContentLoaded", init);

关于javascript - 编写事件日历的第一步,从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22929053/

相关文章:

javascript - 当键名具有数值时,JSON.parse() 是否真的对属性进行排序?

javascript - 在一定宽度时停止响应

javascript - d3 在数据更新时错误地附加了 dom 元素

javascript - 类型错误 : Reduce of empty array with no initial value in Angular

php - 数据库中的重复行

php - 找不到驱动程序 Debian SQL Server PHP

php - 在 mysql 中搜索特定的单词

php - 实时混合应用程序没有 'Access-Control-Allow-Origin' 问题

mysql - 从 MySQL 到 HTML 服务器站点的 WMD Markdown 不显示文本区域

带索引的 Mysql View