初心者のバニラJavaScript練習
JavaScriptの基本的な操作方法については終了しており、JavaScriptの奇妙なthis ES 5 ES 6の違いなどについては、後で議論し、まず実践していきます.何でも一番勉強が早いのは実習です.ノマドコッドのバニラJS無料講座を聞いた後、私が知らないことや何も知らないことを整理します.
ここにはよく整理された文章がある.https://velog.io/@devseunggwan/Javascript-%EB%B0%94%EB%8B%90%EB%9D%BC-JS%EB%A1%9C-%ED%81%AC%EB%A1%AC%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0-3
cssファイル
body{
background-color: aliceblue;
}
.btn{
cursor: pointer;
}
h1{
color: burlywood;
transition: color 0.5s ease-in-out;
}
.clicked{
color: slategray;
}
.form
.greetings{
display: none;
}
.showing {
display: block;
}
.bgImage {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
animation: fadeIn 0.5s linear;
}
clock.js
// ,로 구분
const clockContainer = document.querySelector(".js-clock"),
clockTitle = clockContainer.querySelector("h1"); //꼭 js-clock 안에 h1태그가 포함되어있는지 체크하자..
function getTime(){
const date= new Date();
const minutes = date.getMinutes();
const hours = date.getHours();
const seconds = date.getSeconds();
clockTitle.innerText=`${hours < 10 ? `0${hours}`: hours}:${minutes < 10 ? `0${minutes}`: minutes}:${seconds < 10 ? `0${seconds}`: seconds}`;
}
function init(){
getTime();
setInterval(getTime,1000); //첫번째 인자는 함수, 1초마다 실행
}
init();
gretting.js
const form = document.querySelector(".js-form"),
input = form.querySelector("input"),
greetings = document.querySelector(".js-greetings");
const USER_LS = "currentUser", //local storage key 값
SHOWING_CN = "showing";
function saveName(text){
localStorage.setItem(USER_LS, text); //Local Storage = 만료기한 없음, Session Storage = 세션 종료 시 만료.
}
function handleSubmit(event){
event.preventDefault();
const currentValue = input.value;
paintGreetings(currentValue);
saveName(currentValue);
}
function askForName(){
form.classList.add(SHOWING_CN);
form.addEventListener("submit", handleSubmit); //submit 리스너 등록
}
function paintGreetings(text){
form.classList.remove(SHOWING_CN);
greetings.classList.add(SHOWING_CN);
greetings.innerText = `Hello ${text}`;
}
function loadName(){
const currentUser = localStorage.getItem(USER_LS);
if(currentUser === null){
askForName();
}else{
paintGreetings(currentUser);
}
}
function init(){
loadName();
}
init();
//local storage : 아주 작은 정보를 컴퓨터에 저장시키는 방법
localStorageは有効期限が切れず、ブラウザが閉じても消去されません.セッションの有効期限が切れたときにデータを消去する必要がある場合は、セッションストレージに格納します.JWTをここに保存すればいいのにtodo.js
const toDoForm = document.querySelector(".js-toDoForm"),
toDoInput = toDoForm.querySelector("input"),
toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = "toDos";
let toDos = []; //전역
function deleteToDo(event) {
const btn = event.target; //이벤트가 발생한 dom. 여기서는 button 태그
const li = btn.parentNode; //부모 태그를
toDoList.removeChild(li); //html part에서 지우고
const cleanToDos = toDos.filter(function(toDo) { //li.id가 아닌 것만 걸러내기
return toDo.id !== parseInt(li.id); // li.id는 string이라 number로 형변환
});
toDos = cleanToDos; //대체
saveToDos(); //로컬스토리지에 저장
}
function saveToDos() { //로컬에 저장해서 휘발되지 않게
localStorage.setItem(TODOS_LS, JSON.stringify(toDos)); //자바스크립트 오브젝트를 string으로 변환
}
function paintToDo(text) {
const li = document.createElement("li");
const delBtn = document.createElement("button");
const span = document.createElement("span");
const newId = toDos.length + 1; //1부터
delBtn.innerText = "❌";
delBtn.addEventListener("click", deleteToDo); //클릭 리스너 등록
span.innerText = text;
li.appendChild(delBtn);
li.appendChild(span);
li.id = newId;
toDoList.appendChild(li); //여기까지는 추가했지만 휘발성(새로고침하면 날라감)
const toDoObj = {
text: text,
id: newId
};
toDos.push(toDoObj);
saveToDos();
}
function handleSubmit(event) { //form submit시(Enter)
event.preventDefault(); //기본 form 동작을 막아주고
const currentValue = toDoInput.value; //input 박스 안의 내용을 가져온 다음
paintToDo(currentValue); //넘겨준다.
toDoInput.value = ""; //다시 비워줌
}
function loadToDos() { // userName 없다면 toDolist 출력되지 않음. 새로고침해도 로컬내용보고 불러옴
const loadedToDos = localStorage.getItem(TODOS_LS);
if (loadedToDos !== null) {
const parsedToDos = JSON.parse(loadedToDos); //자바스크립트 object로 변환
parsedToDos.forEach(function(toDo) {
paintToDo(toDo.text);
});
}
}
function init() {
loadToDos();
toDoForm.addEventListener("submit", handleSubmit); //리스너 등록
}
init();
bg.js
const body = document.querySelector("body");
const IMG_NUMBER = 3;
function paintImage(imgNumber) {
const image = new Image(); //이미지 객체 생성
image.src = `images/${imgNumber + 1}.jpg`;
image.classList.add("bgImage");
body.prepend(image); //선택한 요소의 내용의 앞에 콘텐트를 추가합니다.
}
function genRandom() { // 0~2까지 난수 생성
const number = Math.floor(Math.random() * IMG_NUMBER); //floor = 소수점 이하 버리기
return number;
}
function init() {
const randomNumber = genRandom();
paintImage(randomNumber);
}
init();
weather.js
const weather = document.querySelector('.js-weather');
const API_KEY = 'Your API Code Here'; //가입하기 귀찮다 그냥 넘어가자
const COORDS = 'coords';
// function getWeather(latitude, longitude) {
// fetch(
// `https://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${API_KEY}&units=metric` //http가 아니라 https로
// )
// .then(function (response) {
// return response.json();
// })
// .then(function (json) {
// const temperature = json.main.temp;
// const place = json.name;
// weather.innerText = `🌡${temperature.toFixed(1)}℃ 🇰🇷${place}`;
// });
// }
function saveCoords(coordsObj) {
localStorage.setItem(COORDS, JSON.stringify(coordsObj)); //성공했으면 저장.
console.log("coordsObj: "+coordsObj);
}
function handleGeoSuccess(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const coordsObj = {
latitude,
longitude,
};
saveCoords(coordsObj);
//getWeather(latitude, longitude);
}
function handleGeoError() {
console.log('cant access geo location'); //에러시
}
function askForCoords() {
navigator.geolocation.getCurrentPosition(handleGeoSuccess, handleGeoError); //내 현재 위치를 가져온다.
}
function loadCoords() {
const loadedCoords = localStorage.getItem(COORDS);
if (loadedCoords == null) {
askForCoords();
} else {
const parsedCoords = JSON.parse(loadedCoords);
//getWeather(parsedCoords.latitude, parsedCoords.longitude);
}
}
function init() {
loadCoords();
}
init();
ここにはよく整理された文章がある.https://velog.io/@devseunggwan/Javascript-%EB%B0%94%EB%8B%90%EB%9D%BC-JS%EB%A1%9C-%ED%81%AC%EB%A1%AC%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0-3
Reference
この問題について(初心者のバニラJavaScript練習), 我々は、より多くの情報をここで見つけました https://velog.io/@stella6767/초보자를-위한-바닐라-자바스크립트-실습テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol