반응형

1. UI 레이아웃 설계 

 

2. 로그인 UI - HOBIT 화면, Flex 적용


코인마켓캡에서 아직 중간의 슬라이드 애니메이션을 주는 아이템박스와 아래에 자바스크립트 코드를 이용해서 코인들의 데이터 객체들을 넣어주는 작업을 진행하지 않았다. 아직 공부할 부분이 많기 때문에 이 부분을 제외하고 현재 만들 수 있는 로그인 UI를 만들어 오늘 배운 정규표현식을 적용하는 코드를 작성하였다. 아직 정규 표현식을 적용하지는 않았지만, 기본적인 UI 구조와 이를 바탕으로 로그인 화면을 구현하는 것을 진행하였다. 

1. UI 레이아웃 설계 

빗썸 로그인 UI

 

빗썸에 있는 로그인 화면을 보고 대략의 레이아웃을 결정하였다. 박스들은 대부분 div로 감싸서 모든 요소들에게 flex를 이용하여 웹이 작아져도 반응형으로 줄 수 있는 웹 UI를 구현하였다.

2. 로그인 UI - HOBIT 화면, Flex 적용

 

 

 

사이즈 줄였을 때

 

실질적으로 웹의 사이즈를 줄이고 늘렸을 때 사이즈가 안정적으로 줄었다. 웹 UI의 로고는 포토샵을 통해 아발란체 글꼴을 이용하여 만들었고, 호날두를 생각하면서 호빗 로그인 창을 만들었다. 

 

이를 이용하여 코인마켓캡의 클론 화면과 연결을 시키려고 javascript의 버튼 이벤트를 이용하여 코인 마켓캡의 로그인 버튼 클릭 시 이동하는 웹을 구현하였다. 

const btn = document.querySelector(".login");

btn.addEventListener("click", clickHandler);

function clickHandler() {
  // ... 작업 로직 ...  //
  window.location.href = "./login.html";
}

자바 스크립트 코드를 이용하여 로그인 화면시 코인마켓캡에서 호빗으로 넘어가는 화면을 구현하였다. 이를 바탕으로 웹사이트의 서버없이 로컬 로그인 화면을 구현하였고, 추가적으로 코인마켓캡 클론과 가입하기 화면을 구현할 예정이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

1. 코인마켓캡 사이트

 

2. 어제 구현한 코인마켓캡 

 

3. 현재 클론 중인 웹사이트 


 오늘 특별하게 한 것도 없는데 시간이 빨리 간 느낌이었다. 오전엔 scroll 애니메이션을 짜는 것을 구현하였고, 9기 블록체인 발표를 본 이후에 어제 하던 클론 코딩을 진행하였다. 진척 사항은 많이 없었지만,  로고들의 이미지와 반응형 웹으로 구현하기 위한 고민을 하였다. 또한 코인마켓캡 로고 옆 버튼들에 드롭바를 주기 위해 고민하였다. 드로바를 이미 해보아서 어떤 식으로 구현할지는 알고 있었지만, 초반에 a 태그를 이용하여 구조를 짜서 시간을 많이 날려 먹었다. 또한 막상 flex 안에서 드롭바 구현과 마진 및 패딩을 줘 적절한 위치에 배치하는 것이 까다로운 부분이 있었다. 이러한 부분을 고민하였고, 이를 바탕으로 드로바를 구현하였다. 하지만, 아직 맨 위 header 부분의 flex와 드롭바에서 위치를 넘어가면 드롭바 내용이 사라지는 에러들이 있어 이 부분을 수정하여야 한다. 또한 hr 태그를 전체 flex 내부에 주니 전체 부분을 차지하는 것이 아닌 다른 영역들과 마찬가지로 잘리는 부분이 생겼다. 이 오류에 대해 고민해 보아서 고쳐야겠다. 아이템 부분엔 적절히 자산들을 배치하고, 인기 커뮤니 계정엔 애니메이션을 이용하여 세 가지 내용이 자연스럽게 이동하는 애니메이션을 주어야겠다. 또한 최종 암호화폐 자산 출력 부분은 암호화폐들을 객체에 담아두고 반복문을 이용하여 append 하여 주었는데, 이를 append 하는 부분에 표(td, th)를 이용하여 추가하여 각각의 객체들에 대한 정보를 가져가는 방식을 선택해야 할 것 같다.

 

1. 코인마켓캡 사이트

 

2. 어제 구현한 코인마켓캡 

3. 현재 클론 중인 웹사이트 

 

반응형
반응형

1. 코인마켓캡 홈페이지

 

2. 예상 레이아웃 구성도

 

3. 현재 구현된 상태


 

 경일게임 아카데미에서 공부한 지 6주 차 벌써 자바스크립트까지 끝나고 한 달이란 시간이 뚝딱 지나갔다. 짧은 시간이었지만, 한 달 만에 html, css, javascript 까지 공부하였고, 기본적인 스킬들은 모두 공부하였다. 이를 바탕으로 요번 주에 시험을 본결과.. 자바스크립트에선 어느 정도 이해도가 있었지만, html, css 구조를 짜는 부분에 있어서 아쉬운 부분이 많았다. 이를 보충하기 위해 오늘은 공부한 것들을 바탕으로 웹을 구현하는 연습을 하였다.

 

1. 코인마켓캡 홈페이지

 

 

2. 예상 레이아웃 구성도

레이아웃을 아래와 같이 나누어 각각의 html 요소들과 배치들을 하였다. 

 

3. 현재 구현된 상태

기본적인 레이아웃을 바탕으로 큰 틀을 구현하였다. 전반적으로 flex를 이용하여 사이즈를 조절할 수 있게하였다. 

가상자산추가 부분은 for문으로 div 들을 추가였는데 실제 코인마켓캡에는 여러 요소들을 추가하여야 하기 때문에 th, td를 추가하여 사용하여 표 형식으로 데이터를 추가할 예정이다. 또한 가운데 아이템에는 애니메이션 이동을 추가하여 세 가지 화면을 애니메이션 화 하는 작업을 진행할 예정이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

자동차 클래스를 만들고 

그 아래에 자동차 객체들을 여러 개 만들어 원하는 자동차 사이트로 연결하는 클래스들을 만들어 보았다. 

아래는 기본적인 html 코드로 root 아래에 search id를 만들어주었다. 

 

 

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="root">
      <div id="search"></div>
    </div>
    <script src="./index.js"></script>
  </body>
</html>

 

첫 번째로 가장 부모 클래스로 자동차 클래스를 만들었다. 이름과 링크만을 가지는 자동차 클래스를 만들었다.

class Car {
  name;
  link;

  constructor(name, link) {
    this.name = name;
    this.link = link;
  }
}

자동차 클래스를 상속받는 현대차, 기아차, 테슬라, 삼성(르노자동차)을 만들었다. 

class Hyundai extends Car {}
class Kia extends Car {}
class Tesla extends Car {}
class Samsung extends Car {}

자동차 리스트를 만들어 객체를 생성과 동시에 초기화 하여 주었다. 이름과 링크를 초기화하였다. 

const carList = [
  new Hyundai("현대", "https://www.hyundai.com/"),
  new Kia(
    "기아",
    "https://www.kia.com/kr?utm_source=google_SA&utm_medium=AD202307&utm_campaign=KiaSales2022_brand&utm_content=keyword_pc&utm_term=%EA%B8%B0%EC%95%84&gclid=Cj0KCQjwnrmlBhDHARIsADJ5b_kAbfoRb1zNA8hlfOYk_7-Fi0gGlnq0iqRkaeCpdhWHG4EGDWmV8G8aAhv_EALw_wcB"
  ),
  new Tesla("테슬라", "https://www.tesla.com/ko_kr"),
  new Samsung(
    "삼성",
    "https://www.renaultkoream.com/new/model/master.jsp?bannerUrl=MASTERSEARCHG2307&bannerSeq=1&utm_source=google&utm_medium=pc_cpc&utm_campaign=RKM_SEA_MASTER_DEFENSIVE_2307&gclid=Cj0KCQjwnrmlBhDHARIsADJ5b_mEDG_Wk1Zz6ZkgEDD1CvCcd6H6Rb3a1xnkaNS8o_uVxNvkB2-YGSkaAiorEALw_wcB"
  ),
];

 

carList 내부아이템들을 foreach 문을 이용하여 돌려주었고, 이때 document.write를 이용하여 출력을 하였다. 아직 

하지만, serach id 에 엘리먼트에 div 가 추가로 생기는 것이 아닌 출력을 했을 시에 작동은 잘하지만, javascript에 링크가 걸려 출력이 되었다. 이 부분에 대해 어떤 방식으로 자바 스크립트를 html 엘리먼트로 주어야 할지 공부해야겠다.

 

 

carList.forEach((item) => {
  console.log(item.name);
  item.name = document.write(
    "<a href=" + item.link + ">" + "<div>" + item.name + "</div>" + "</a>"
  );
});

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

1. 고차함수 

2. 재귀함수


1. 고차함수 

함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다. 

쉽게 말해 함수에 인자로 함수로 받거나 함수의 반환형이 함수이다면 고차함수라고 생각할 수 있다.

pleaseCallback안에 console.log를 실행시키기 때문에 인자로 함수를 받았기 때문에 고차함수라고 할 수 있다. 

 

function pleaseCallback(tempLog) {
  tempLog("안녕");
}

pleaseCallback(console.log);

또한 콜백함수의 경우에도 pleaseCallback 함수 내에 익명함수를 실행시켰기 때문에 함수를 인자로 사용하여 고차함수라고 말할 수 있다. 

pleaseCallback((temp) => {
  console.log(temp);
});

이처럼 함수내에 함수 또는 함수를 리턴으로 받는 함수들을 고차함수라고 한다.

 

sort함수

console.log(
  [1, 6, 2, 13123, 3, 1235, 95].sort((a, b) => {
    return a - b;
  })
);

정렬을 할 때 사용되는 sort 함수 또한 정렬을 하기 위해 뒤에 콜백함수를 호출하므로 고차함수의 예시라고 할 수 있다. 

2. 재귀함수

재귀함수

재귀함수는 쉽게 말해 자기 자신을 호출하는 함수이다. 영어에서 흔히 himself, myself, itself 같이 자기 자신을 호출하는 함수이다. 

function func2(num) {
  console.log(num);
  if (!num) return 0;
  func2(num - 1);
}

func2(10); 을 실행 시켰을 때 num = 10 이고 콘솔에서 10을 찍은 후 if(! 10) 이 거짓이기 때문에 func2(num-1)을 재귀함수로 함수 내에서 호출한다. 이런 식으로 여러 번 자기 자신을 호출하여 10 ~ 1까지 출력하고 if(! 0) 은 참이기 때문에 마지막으로 0을 리턴하면서 끝내기 때문에 10 ~ 0까지 출력되게 된다. 

 

 

 

 

 

 

반응형
반응형

1. 이벤트 리스너

1 - 1. addEventListener

 

1 - 2. window에서 addEventListener/ pointerdown, pointerup 사용하기. 

 

1 - 3. window에서 addEventListener/ touchstart, touchend 사용하기. 

 

 

2. 이벤트 핸들러

2 - 1. onclick 

 

2 - 2. onload

 

2 - 3. onsubmit 

 

2-4. onfocus, onblur

 

2-5. onchange, oninput


 

작성된 HTML

<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Event</title>
  </head>
  <body>
    <div id="root">
      <div id="btn">버튼 확인?</div>
      <div id="count">0</div>
      <div>
        <div id="width">?px</div>
        <div id="height">?px</div>
      </div>
      <form id="test-form">
        <input type="text" id="name" name="name" />
        <div id="name-alert"></div>
        <button>입력완료</button>
      </form>
      <div id="template-literal"></div>
    </div>
    <script src="./public/index.js"></script>
  </body>
</html>

 

1.이벤트 리스너

1 - 1. addEventListener

이벤트를 추가하는 방식으로 이 방법을 이용하여 여러 개의 이벤트 핸들러를 등록할 수 있다.

버튼에 이벤트 리스너를 등록하여 btn 을 클릭하면 e.target으로 btn아이디의 요소전체를 가지고 오고 , e.target.innerHTML로 btn 아래에 버튼 확인? 을 가져오게 된다.

document.getElementById("btn").addEventListener("click", (e) => {
  console.log(e.target);
  console.log(e.target.innerHTML);
});

 

이벤트 리스너엔 addEventListener("click", (e) ={});

가 들어오는데 콜백 함수 앞에 "click"은 이벤트리스너가 동작할 때 발생되는 이벤트 이름이다. 여러 이벤트들이 있는데 이 이벤트들에 on 접두사를 붙이면 이벤트 핸들러가 된다. 이벤트 핸들러는 실질적으로 특정이벤트가 발생됐을 때 호출되는 함수이다.

 

document.getElementById("count").addEventListener("click", (e) => {
  console.log(e);
  if (e.ctrlKey == true) {
    e.target.innerHTML = +e.target.innerHTML - 1;
  } else {
    e.target.innerHTML = +e.target.innerHTML + 1;
  }
});

count id 에 이벤트 리스너로 클릭을 받았을 때 ctrl 키를 클릭하면서 클릭을 하면 참이 되고, +e.target.innerHTML -1;을 하여 숫자가 빼진다 여기서 ` + ` 단항연산자가 없고 e.target.innerHTML을 실행하면 011111로 숫자가 더해지지 않고 문자로 숫자가 더해져서 출력될 것이다. ` + `는 0에 숫자를 연산해 주기 위한 단항연산자로 문자열 타입을 숫자로 변환시킨다. 단항연산자를 사용할 수 없는 문자열이라면 NAN을 출력시킨다.

 

1 - 2. window에서 addEventListener/ pointerdown, pointerup 사용하기. 

window.addEventListener("pointerdown", (e) => {
  console.log(e.pageX);
  console.log(e.pageY);
});

window.addEventListener("pointerup", (e) => {
  console.log(e.pageX);
  console.log(e.pageY);
});

pointerdown은 window 즉 브라우저에서 마우스를 누르고 있을 때 console.log로 e.pageX, e.pageY를 이용하여 좌표를 찍어준다. 

pointerup은 브라우저에서 마우스를 뗐을 때 console.log로 e.pageX, e.pageY를 이용하여 좌표를 찍어준다. 

 

 

1 - 3. window에서 addEventListener/ touchstart, touchend 사용하기. 

window.addEventListener("touchstart", (e) => {
  console.log(e.changedTouches[0].pageX);
  console.log(e.changedTouches[0].pageY);
});

window.addEventListener("touchend", (e) => {
  console.log(e.changedTouches[0].pageX);
  console.log(e.changedTouches[0].pageY);
});

터치 이벤트는 모바일 환경에서 여러 개의 터치가 들어올 수 있다 때문에 터치 배열로 들어오게 된다. 위 코드는 touchstart로 시작 지점부터 touchend로 끝지점까지 터치된 좌표영역을 나타낸다.

 

2. 이벤트 핸들러

2 - 1. onclick 

document.getElementById("btn").onclick = function (e) {
  console.log("click했음");
  console.log(e);
};

 

btn 아이디인 버튼 확인? 을 클릭하게 되면 아래와 같이 click 했음과 PointerEvent 객체가 출력된

2 - 2. onload

window.onload = function () {
  console.log("페이지 로딩 완료");
};

window.load()는 자바스크립트에서 페이지가 로드되면 자동으로 실행되는 전역 콜백함수이다. 

페이지의 모든 요소들이 로드되어야 출력된다. 즉 전체페이지가 모두 불러와진 후에 동작하는 메서드이다.

 

 

2 - 3. onsubmit 

onsubmit함수는 제출 이벤트가 발생할 때 동작이 발생한다. 

test-form에 데이터를 입력하고 입력 완료를 해도 preventDefault() 함수가 동작하여  a 태그를 눌렀을 때도 href 링크로 이동하지 않게 할 경우와  form 안에 submit 역할을 하는 버튼을 눌렀어도 새로 실행하지 않게 하고 싶을 경우 (submit은 작동됨)이다. preventDefault() 가없다면 0.1초만 form이 전송되어 console.log의 내용들은 찍히지 않을 것이다.

 

document.getElementById("test-form").onsubmit = (e) => {
  e.preventDefault();
  console.log("데이터 안보냈어");
};

document.forms["test-form"].onsubmit = (e) => {
  e.preventDefault();
  console.log("데이터 입력완료");
};

2-4. onfocus, onblur

input 박스 내에 포커싱(마우스 클릭)을 했을 때 콘솔에 포커싱이 뜬다. 

input 박스 이외에 지점에 마우스 클릭을 했을 때 포커싱이 풀리면서 선택이 풀렸어가 콘솔에 작성된다.

document.getElementById("name").onfocus = function (e) {
  console.log("포커싱");
};

document.getElementById("name").onblur = function (e) {
  console.log("선택이 풀렸어");
};

focuse와 onblur를 이용하여 input에 마우스가 포커싱 되어 있는지 풀려있는지 판단할 수 있다. 

2-5. onchange, oninput

onchange

document.getElementById("name").onchange = function (e) {
  console.log(e.target.value);
  document.getElementById("name-alert").innerHTML = e.target.value;
};

onchange 이벤트는 input 태그를 벗어났을 때 발생하는 이벤트이다. input 박승안에서 입력값을 넣고 다른 클릭이나 이벤트를 발생시키면 입력값이 name-alert의 inner로 들어가서 출력되게 된다. 

 

oninput

document.forms["test-form"]["name"].oninput = function (e) {
  console.log(e.target.value);
};

oninput 이벤트 input을 하는 즉시 콘솔에 작성된 입력값이 그대로 출력된다.

 

 

 

 

 

 

반응형

'블록체인 개발' 카테고리의 다른 글

자바스크립트 클래스 사용해보기  (1) 2023.07.12
고차함수와 재귀함수  (0) 2023.07.11
Javascript DOM 엘리먼트 객체  (0) 2023.07.07
Javascript Scope & Scope Chain  (0) 2023.07.06
BOM (Browser Object Model)  (0) 2023.07.04

+ Recent posts