2014-04-08 48 views
1

我在教自己一些核心的網絡技術,主要是javascript php和mysql。我想創建一個將這3個關聯起來的事件日曆。編程事件的第一步日曆,從哪裏開始?

我在想,我會在javascript中繪製日曆,然後使用php從mysql數據庫添加事件。現在我腦海中的第一步是創建一個繪製日曆的函數,然後我將用document.write調用它。這是最合乎邏輯的方法嗎?

+1

嗯,我肯定不會用'document.write' – naomik

+0

我謹提請日曆與HTML和CSS。然後讓AJAX處理添加新事件 - 並且還有簡單的GET/POST作爲後備(如果您希望日曆在沒有JavaScript的情況下工作)。 –

+0

document.onload然後呢?我想使用JavaScript DOM方法和屬性添加html和css,我創建日曆的主要原因是練習,所以儘管使用html/css繪製它會更容易,但我想堅持使用js – user3376521

回答

1

日曆的計劃/寫入要求。它會做什麼等等

先從設計開始。僅僅使用HTML CSS JAVASCRIPT

然後計劃數據庫DB_SCHEMA作爲SteamFire說

的實現使用PHP

只是一個寬泛了看法

+0

我想創建表並添加一週的日子,但是我寫的這段代碼不適合我..還是新的,我做了一些codeacademy tuts,並閱讀了W3C,但多數民衆贊成,繼承人的代碼有問題: – user3376521

1

不,我建議你首先考慮數據庫。製作一個模式並創建數據庫。然後,考慮您將使用並實施它們的所有服務(顯示/添加/編輯/刪除事件/用戶...)。 測試你的服務,當你所有的服務都很好的實施。編寫您的網頁應用程序

  1. 數據庫
  2. 服務(PHP)
  3. 的Web應用程序

這是我的意見,但我認爲這是一個很大的訂單。

7

下面是你一個開始:jsfiddle demo

按一下週圍在日期和你會看到selected風格的變化。

example

注意這取決於moment.js - 必需的lib 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); 
+0

圖書館看起來無限有用,謝謝! – user3376521

+1

@ user3376521,只是爲了記錄,我在這裏爲您寫的代碼不包含在momentjs lib中;它只是在某些部分使用了momentjs。 – naomik

+0

naomik日曆函數中的兩個參數做了什麼?我在編寫代碼時遇到了一些麻煩,所以我試圖單獨使用 – user3376521