CSSチャレンジ3
更新
いくつかのIRLスタッフのために、私は来週の次の挑戦を掲示しています.また、任務のためにより多くの時間があることを意味します.ご迷惑をおかけして申し訳ありません.
それはすでに第3週です、damnは飛行時間か何ですか.先週の投稿です
もはや利用できない記事
これは何
あなたが新しいならば、そこにこんにちは!CSSであなたのスキルを向上させたいです.これは、あなたが提案された機能や要素を再現するように挑戦するだけでそれを行うのを助けることを目的としたシリーズです.私は、ものを造るとき、使用である挑戦を掲示するだけです.だからコードゴルフや不明瞭なもの.
これは毎週の挑戦ですので、毎週月曜日に新しいものが構築されます.また、毎週月曜日の挑戦にすべての提出をまとめます.
あなたが解決策を解決する場合は、コメントの投稿リンク(コメント、コードルズ、jsfiddles、何を好む).
カレンダー
この課題は、カレンダーを作ることです.あなたは純粋なJSのロジックを行うことができます、反応、Vueなど.
JavaScriptで経験していないか、それに対処したくない人のために、ここで、私はすべてをする若干の純粋なJSコードを提供しました、それで、あなたはデザインに集中することができます.ちょうどデザインdocベローに従ってください.
要件
カレンダーを含める必要があります
ので、あなたはそれを行う必要はありません
var calendarNode = document.querySelector("#calendar");
var currDate = new Date();
var currYear = currDate.getFullYear();
var currMonth = currDate.getMonth() + 1;
var selectedYear = currYear;
var selectedMonth = currMonth;
var selectedMonthName = getMonthName(selectedYear, selectedMonth);
var selectedMonthDays = getDayCount(selectedYear, selectedMonth);
renderDOM(selectedYear, selectedMonth);
function getMonthName (year, month) {
let selectedDate = new Date(year, month-1, 1);
return selectedDate.toLocaleString('default', { month: 'long' });
}
function getMonthText () {
if (selectedYear === currYear)
return selectedMonthName;
else
return selectedMonthName + ", " + selectedYear;
}
function getDayName (year, month, day) {
let selectedDate = new Date(year, month-1, day);
return selectedDate.toLocaleDateString('en-US',{weekday: 'long'});
}
function getDayCount (year, month) {
return 32 - new Date(year, month-1, 32).getDate();
}
function getDaysArray () {
let emptyFieldsCount = 0;
let emptyFields = [];
let days = [];
switch(getDayName(selectedYear, selectedMonth, 1))
{
case "Tuesday":
emptyFieldsCount = 1;
break;
case "Wednesday":
emptyFieldsCount = 2;
break;
case "Thursday":
emptyFieldsCount = 3;
break;
case "Friday":
emptyFieldsCount = 4;
break;
case "Saturday":
emptyFieldsCount = 5;
break;
case "Sunday":
emptyFieldsCount = 6;
break;
}
emptyFields = Array(emptyFieldsCount).fill("");
days = Array.from(Array(selectedMonthDays + 1).keys());
days.splice(0, 1);
return emptyFields.concat(days);
}
function renderDOM (year, month) {
let newCalendarNode = document.createElement("div");
newCalendarNode.id = "calendar";
newCalendarNode.className = "calendar";
let dateText = document.createElement("div");
dateText.append(getMonthText());
dateText.className = "date-text";
newCalendarNode.append(dateText);
let leftArrow = document.createElement("div");
leftArrow.append("«");
leftArrow.className = "button";
leftArrow.addEventListener("click", goToPrevMonth);
newCalendarNode.append(leftArrow);
let curr = document.createElement("div");
curr.append("📅");
curr.className = "button";
curr.addEventListener("click", goToCurrDate);
newCalendarNode.append(curr);
let rightArrow = document.createElement("div");
rightArrow.append("»");
rightArrow.className = "button";
rightArrow.addEventListener("click", goToNextMonth);
newCalendarNode.append(rightArrow);
let dayNames = ["M", "T", "W", "T", "F", "S", "S"];
dayNames.forEach((cellText) => {
let cellNode = document.createElement("div");
cellNode.className = "cell cell--unselectable";
cellNode.append(cellText);
newCalendarNode.append(cellNode);
});
let days = getDaysArray(year, month);
days.forEach((cellText) => {
let cellNode = document.createElement("div");
cellNode.className = "cell";
cellNode.append(cellText);
newCalendarNode.append(cellNode);
});
calendarNode.replaceWith(newCalendarNode);
calendarNode = document.querySelector("#calendar");
}
function goToPrevMonth () {
selectedMonth--;
if (selectedMonth === 0) {
selectedMonth = 12;
selectedYear--;
}
selectedMonthDays = getDayCount(selectedYear, selectedMonth);
selectedMonthName = getMonthName(selectedYear, selectedMonth);
renderDOM(selectedYear, selectedMonth);
}
function goToNextMonth () {
selectedMonth++;
if (selectedMonth === 13) {
selectedMonth = 0;
selectedYear++;
}
selectedMonthDays = getDayCount(selectedYear, selectedMonth);
selectedMonthName = getMonthName(selectedYear, selectedMonth);
renderDOM(selectedYear, selectedMonth);
}
function goToCurrDate () {
selectedYear = currYear;
selectedMonth = currMonth;
selectedMonthDays = getDayCount(selectedYear, selectedMonth);
selectedMonthName = getMonthName(selectedYear, selectedMonth);
renderDOM(selectedYear, selectedMonth);
}
デザインドキュメント
<div id="calendar" class="calendar"></div>
renderDOM
関数は以下のようにしてカレンダーのdivに追加します.class="date-text"
) class="button"
) class="cell cell--unselectable"
) class="cell"
) 続きを読む
提供されているJSを使用する場合は
Reference
この問題について(CSSチャレンジ3), 我々は、より多くの情報をここで見つけました https://dev.to/mikister/css-challenges-3-calendar-f1hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol