ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nomard) html,css,script 기초(1)
    기타 2023. 2. 25. 20:09
    // 변수
    const vari = 1;
    
    //배열
    const arr = [a , b , c];
    
    arr[1] = g;  // const 지만 배열 내부 값은 변경 가능
    
    배열에 요소를 추가하는 방법
    arr.push(값)
    
    // 객체
    const objec = {
        name: "me",
        points: 10,
        boolean1 : true
        sayHello: function(){}  // 객체 내부에 함수 선언 방법 
    };
    
    // 객체 호출 방법 2가지
    console.log(player.name)
    console.log(player["name"]);
    
    objec.sayHello();
    
    ** const는 수정이 불가능한 타입의 선언이지만
    const objec 내부의 정보를 수정하는 것은 가능하다 ( objec 자체를 수정하는 것은 불가능 )
    
    객체의 경우 다음과 같은 형태로 요소를 추가할 수 있다.
    objec.lastName = "king";
    const title = document.querySelector(" css문법 ");  -> ex) .hello ul li
    다음의 명령어는 해당 요소가 여러개라도 첫 번째 요소만 가져온다.
    
    const title = document.querySelectorAll(" css문법 ");
    다음은 해당 요소를 모두 불러와서 배열로 저장시킨다.
    
    const title = document.getElementsByClassName(" class명 ")
    다음은 해당 요소를 모두 불러와서 배열로 저장시킨다
    
    
    Event
    function 실행시킬 함수 이름 () { }
    변수.addEventListener( "Event종류", 실행시킬 함수 );
    
    
    Css에 .clicked{ } 로 스타일을 선언 한 후
    자바 스크립트에서
    function handleh1Click(){
        const clickedClass = "clicked"
        if(h1.className === clickedClass){
            h1.className = "";
        } else{
            h1.className = clickedClass;
        }
    }
    다음과 같은 함수를 작성하면
    해당 요소에 clicked 클래스를 부여하고 삭제함으로서 스타일을 변화시킬 수 있다.
    다만 이 방법은 기존에 요소가 가지고 있던 클래스를 덮어씌우는 방법이므로
    classList를 사용하면 더 좋다
    
    function handleh1Click(){
        const clickedClass = "clicked"
        if(h1.classList.contains(clickedClass)){
            h1.classList.remove(clickedClass);
        } else{
            h1.classList.add(clickedClass);
        }
    }
    
    위의 코드를 더 간단하게 사용하려면
    function handleh1Click(){
        h1.classList.toggle("clicked");
    }
    변수.classList.toggle(토글 하고싶은 클래스 명);
    으로 사용할 수 있다.
    input 데이터를 가져와서 유효성 검사를 할 경우
    docoument.getElementById 나 document.querySelector로 요소를 가져와서
    if 문으로 제어할 수 있지만.
    
    form 태그 속에 input을 위치시키면 maxlenght="10" 이나 required 같은 명령어를 실행시킬 수 있다.
    
    fonm 태그 속에 잇는 일반 버튼 또는 submit 속성을 가진 input을 클릭하면
    submit event가 실행되고
    이를 통해 함수를 작동시키고 싶으면
    add.EventListener("submit", ) 을 이용한다.
    
    기본적으로 form에서 submit을 실행하면 웹페이지가 새로고침 된다.
    
    submit으로 어떤 함수를 작동시킬 때 함수의 첫번째 인수(argument)에는 java스크립트가 제공하는
    정보들이 저장된다
    ex) function onSubmit(information) 함수가 submit으로 실행될 때 informatino에 submit에 대한 정보가 저장됨
    
    또한 submit 시에 자동으로 새로고침 되는 것을 막으려면
    information.preventDefault(); 명령어를 실행시키는 것으로 
    브라우저가 기본적으로 발생시키는 이벤트들을 멈출 수 있다
    브라우저에는 값을 저장할 수 있는 local storage 가 존재한다.
    devtools 의 application - local storage에서 확인할 수 있고
    
    localStorage.setItem("Key", "Value" ) 형태로 저장하고
    localStorage.getItem("Key") 형태로 불러올 수 있다. // 없는 정보를 불러오면 null이 온다
    localStorage.removeItem("Key") 로 삭제할 수도 있다.
    
    const loginForm = document.querySelector("#login-form");
    const loginInput = document.querySelector("#login-form input");
    const greeting = document.querySelector("#greeting");
    
    const HIDDEN_CLASSNAME = "hidden";
    const USERNAME_KEY = "username";
    
    function onSubmit(tomato){
        tomato.preventDefault();
        loginForm.classList.add(HIDDEN_CLASSNAME);
        const username = loginInput.value;
        localStorage.setItem(USERNAME_KEY,username);
        paintGreetings(username);
    }
    
    function paintGreetings(username){
        greeting.innerText = `Hello ${username}`;
        greeting.classList.remove(HIDDEN_CLASSNAME);
    
    }
    
    const savedUsername = localStorage.getItem(USERNAME_KEY);
    
    if (savedUsername === null){
        loginForm.classList.remove(HIDDEN_CLASSNAME);
        loginForm.addEventListener("submit",onSubmit);
    } else{
        paintGreetings(username);
    }
    clock 만들기
    
    interval 이란?
    setInterval(명령어 , ms)
    ms마다 명령어를 실행시킨다
    
    timeout(명령어 , ms)
    ms 뒤에 명령어를 실행시킨다
    
    출력값이 항상 2자리가 나오게 하고싶을 때  ex) 시간의 초 00 01 04 14 55
    "문자열".padStart(2,"0")   ->  String의 길이가 2, 아니라면 앞에 0을 추가한다.
    "문자열".padEnd(2,"0")     ->  String의 길이가 2, 아니라면 뒤에 0을 추가한다.
    
    숫자를 문자열로 바꾸는 방법
    new Date().getHours();  -> 숫자
    String(new Date().getHours())  -> 문자
    
    시간, 분, 초를 Date()로 불러내서 원하는 방식으로 변경한 다음 innerText해준다.
    clock.innerText = `${hours}:${minutes}:${seconds}`;
    
    getClock();
    setInterval(getClock, 1000);
    Math.random();  -> 0 ~ 1사이의 숫자를 랜덤으로 출력한다
    Math.round();  -> 소수점을 반올림한다.
    Math.ceil();  -> 올림한다
    Math.floor();  -> 내림한다
    html 태그에 요소 추가하는 방법
    
    const 변수 = document.createElement("태그명");	특정 태그를 생성해서 변수에 저장
    const 변수2 = document.createElement("태그명2");	특정 태그를 생성해서 변수2에 저장
    
    변수.appendChild(변수2);  -> 생성된 변수 태그 내부에 변수2 태그를 추가한다.
    변수2.innerText = 값;  -> 변수2 태그 내부에 text값을 추가한다.
    
    넣고싶은위치(HTML 내부에 있는 태그).appendChild(변수)   -> html에 변수 태그를 추가한다
    (가장 마지막 부분에 추가됨)
    
    
    To Do List 작성 처럼
    사용자가 입력한 정보를 바탕으로 요소를 작성하고 해당요소를 제어하고 싶을 때
    function을 여러개 생성할 수 없다.
    다만 function의 첫번째 매개변수에 담겨있는 정보를 바탕으로 요소들을 제어할 수 있다.
    
    ex) 사람들이 글쓰기를 누르면 게시글이 생성되는 게시판을 만들 경우
    리스트를 생성하는 방법은 createElement와 appendChild 로 자유롭게 가능하다.
    게시글 삭제 버튼을 만드는 경우 어떤 버튼이 어떤 리스트를 삭제하게 만들수 있는지
    파악하기가 어려운데,
    이때 버튼의 이벤트 함수를 function delete(event){ } 로 만들었다면.
    우리는 event argument를 통해 부모요소를 찾으므로서 버튼과 리스트를 특정할 수 있다.
    
    to do list에 생성된 버튼을 눌러 해당 버튼이 있는 li를 제거하고 싶다면
    const li = event.target.parentElement;	// li 변수에 해당 버튼의 부모요소를 저장시키고
    li.remove();							// 삭제시킨다
    localStorage.setItem("Key", 값) 으로 값에 key를 붙여서 localStorage에 저장할 수
    있다는 것을 배웠다.
    또한 array.push(값)을 통해 값을 배열에 저장할 수 있는 것도 배웠다.
    
    하지만
    localStorage.setItem("Key", array) 로 배열을 localStorage에 저장하면
    문자 형태로 저장되는데, 이는 값을 저장하고, 빼와서 사용하는데 불편함이 발생한다.
    
    그래서 localStorage에 배열을 저장할 때는
    localStorage.setItem("Key", JSON.stringify(array)) 를 활용해서
    array 내부에 있는 값들이 각각 문자열로 저장되도록 만들어 줘야한다
    ex) array = ["a", "b", "c"]; 인 경우
    localStorage.setItem("Key", array) -> a,b,c 로 저장됨
    localStorage.setItem("Key", JSON.stringify(array)) -> ["a", "b", "c"] 로 저장됨
    
    JSON.stringify([1,2,3,4]) -> "[1,2,3,4]" 배열을 string으로 저장하고 싶을 때 사용하자
    JSON.parse("[1,2,3,4]") -> [1,2,3,4] 로 string을 배열로 전환한다.
    
    const parsedToDos = JSON.parse(KEY) 에 저장된 값들은
    parsedToDos.forEach(함수명);
    
    function 함수명(item){ } 의 첫 번째 매개변수인 item에 각 값들을 특정하게 만들어준다
    따라서 함수를 호출 할 때
    함수명(값){ } 으로 호출하고싶은 값을 넣으면 배열에 저장된 값들 중 특정한 값을 불러
    올 수 있게 도와준다
    
    이런 함수를 짧게 쓰려면
    parsedToDos.forEach((item) => 실행문); 의 형태로 쓸 수 있다.
    
    ex)
    function sayHello(item){
    console(item);
    }
    parsedToDos.forEach(sayHello);
    
    대신
    parsedToDos.forEach((item) => console.log(item));
    배열에 저장된 값을 새로고침 해도 잃지 않으려면
    local.Storage에 저장된 값을 배열에 넣어주는 작업을 해야한다.
    const parsedToDos = JSON.parse(savedToDos);
    toDos = parsedToDos;
    
    배열을 저장할 때 각 값에 id를 부여해서 값들을 구분하고 싶다면
    객체를 생성해서 자동으로 id를 부여할 수 있도록 만들어야한다.
    const newTodoObj = {
            text:newTodo,
            id: Date.now();
        }
    해당 객체에서 text나 id만 꺼내서 쓰고싶으면
    newToDoObj.text / newToDoObj.id 로 불러올 수 있다.
    
    localStorage에 저장되있는 값을 제거할 때는 실제로 array에 있는 값을 제거하는 것이 아니라
    제거하고자 하는 값이 제외된 array를 생성해서 저장하는 방식을 사용한다.
    이 때 배열.filter(함수명) 명령어를 실행하는데
    배열.filter() 는 배열에 있는 값들을 차례로 함수에 집어넣고
    함수에서 리턴 된 값을 다시 받아온다. 만약 return 값이 없다면 해당 값을 제거할수 있게 된다.
    
    toDos = toDos.filter(toDo => toDo.id != parseInt(li.id));
    다음과 같이 선언한다면 toDo의 요소들 중 toDo의 id와 li의 id가 같은 것만 빼고
    새롭게 배열을 만들어서 toDos에 저장한다.
    날씨
    navigator.geolocation.getCurrentPosition()
    -> 인수가 2개 필요하다 ( 잘 됐을 때 실행할 함수 , 잘 안 됐을 때 실행할 함수 );
    
    해당 명령어를 실행하면 위치 추적 동의 알람이 뜨고
    동의 할 시 현재 나의 위치를 알 수 있다.

     

    '기타' 카테고리의 다른 글

    유튜브 클론코딩(1)  (0) 2023.03.23
    유튜브 API (메모용)  (0) 2023.03.22
    git hub [ CRLF , LF ] 오류  (0) 2023.03.20
    method 와 function  (0) 2023.03.17
    yalco) Git hub  (0) 2023.03.05
Designed by Tistory.