<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>chloe_park.log</title>
        <link>https://velog.io/</link>
        <description>hello world explorer</description>
        <lastBuildDate>Sun, 11 Jul 2021 14:01:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>chloe_park.log</title>
            <url>https://images.velog.io/images/chloe_park/profile/d3a80bde-e547-4b96-806e-522124bc0f65/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. chloe_park.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/chloe_park" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Javascript-14.weather API 호출하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-14.weather-API-%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-14.weather-API-%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 11 Jul 2021 14:01:06 GMT</pubDate>
            <description><![CDATA[<p>weather API에서 (<a href="https://openweathermap.org/api">https://openweathermap.org/api</a>) 좌표에 따라 api를 호출하는 주소를 찾는다. 
api.openweathermap.org/data/2.5/weather?lat={lat}&amp;lon={lon}&amp;appid={API key}
api key는 로그인 계정에서 찾는데, d181c1b6689d8d7edd175cbff840f908였다.</p>
<pre><code>const url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&amp;lon=${lon}&amp;appid=${API_key}`</code></pre><p>fetch를 이용해서 도시와 날씨 정보를 가져온다. </p>
<p>일반적으로 fetch의 사용법은 다음과 같다.</p>
<pre><code>fetch(&#39;http://example.com/movies.json&#39;)
  .then(response =&gt; response.json())
  .then(data =&gt; console.log(data));</code></pre><p>이 경우에는 api 를 호출해서, data를 json으로 받은 후 데이터에서 도시 이름과 날씨를 받아야 한다. </p>
<pre><code>fetch(url).then(response =&gt; response.json()).then(data =&gt; {
const city = document.querySelector(#weather span:first-child);
const weather = document.querySelector(#weather span:last-child);
city.innerText = data.name
weather.innerText = `${data.weather[0].main} / {data.main.temp}`</code></pre><p>html에는 해당 영역을 만들어두어야 한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/ddf8d587-39b7-400f-9ac6-fc4cfc2af607/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-11%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.01.10.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-13.geolocation 가져오기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-13.geolocation-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-13.geolocation-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Thu, 08 Jul 2021 15:24:16 GMT</pubDate>
            <description><![CDATA[<p>위치를 가져오는 것은 쉽다. 
navigator.geolocation.getCurrentPosition(성공, 실패)을 이용한다.</p>
<pre><code>navigator.geolocation.getCurrentPosition(GeoSuccess, GeoError);</code></pre><p>성공, 실패 경우에 대한 함수를 정의한다.
성공 시에는 인자에 position을 전달한다. </p>
<pre><code>function GeoSuccess(position){
    const lat = position.coords.latitude;
    const lng = position.coords.longitude;
    console.log(&quot;You are in &quot;+ lat, lng);</code></pre><p>실패시에는 실패 메시지를 출력한다.</p>
<pre><code>function GeoError(){
    console.log(&quot;No weather&quot;);
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/6f9cbb85-7bcc-4b8e-bcf0-bde0495537f1/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-09%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.24.03.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-12.DB에서 특정값 제거하기2]]></title>
            <link>https://velog.io/@chloe_park/Javascript-12.DB%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B02</link>
            <guid>https://velog.io/@chloe_park/Javascript-12.DB%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B02</guid>
            <pubDate>Thu, 08 Jul 2021 14:58:55 GMT</pubDate>
            <description><![CDATA[<p>array에서 특정값을 제거하는것은
삭제가 아니라 제외다.
이를 위해 filter를 사용한다. </p>
<pre><code>function deleteTodo(event){
    const li = event.target.parentElement;
    li.remove();
    toDos = toDos.filter((toDo) =&gt; toDo.id !== parseInt(li.id))
    saveTodo();
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/48a07240-28b1-48ca-83c7-b8e0ca9ed65e/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-08%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.58.46.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-11.DB에서 특정값 삭제하기1]]></title>
            <link>https://velog.io/@chloe_park/Javascript-11.DB%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B01</link>
            <guid>https://velog.io/@chloe_park/Javascript-11.DB%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B01</guid>
            <pubDate>Thu, 08 Jul 2021 14:19:47 GMT</pubDate>
            <description><![CDATA[<p>화면에 있는 것을 단순히 지우는 것이 아니라
DB에서 특정값을 삭제하기 위해서는
텍스트, id 형태를 할당해야 한다.</p>
<p>newTodo를 newTodoObj로 변경해서 저장한다.</p>
<pre><code>    const newTodoObj = {
        text : newTodo,
        id : Date.now(),
    }</code></pre><p>id에는 Date.now()를 이용해 랜덤값을 준다.
그다음에 toDos array에는 newTodoObj를 추가한다. 
그러면 사용자가 submit 했을때 텍스트와 id 값이 함께 저장된다. 
저장된 값이 있을때 아이템을 하나씩 그려주는 paintTodo에도 newTodoObj를 입력한다.</p>
<p>html에 id를 전해주기 위해
li.id = newTodo.id를 추가한다. 
그리고 span.innerText = newTodo.text로 텍스트 값만 넣어준다. </p>
<pre><code>function paintTodo(newTodo){
    const li = document.createElement(&quot;li&quot;);
    li.id = newTodo.id;
    const span = document.createElement(&quot;span&quot;);
    const button = document.createElement(&quot;button&quot;);
    li.appendChild(span);
    li.appendChild(button);
    span.innerText = newTodo.text;
    button.innerText = &quot;X&quot;;
    button.addEventListener(&quot;click&quot;, deleteTodo);
    console.log(li);
    todoList.appendChild(li);
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/6115d85c-eec0-4a3f-9980-39d9f7aaf8d6/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-08%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.19.26.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-10.todo list 새로고침해도 저장하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-10.todo-list-%EC%83%88%EB%A1%9C%EA%B3%A0%EC%B9%A8%ED%95%B4%EB%8F%84-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-10.todo-list-%EC%83%88%EB%A1%9C%EA%B3%A0%EC%B9%A8%ED%95%B4%EB%8F%84-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 07 Jul 2021 14:33:47 GMT</pubDate>
            <description><![CDATA[<p>화면에 todo list가 그려져도,
새로고침하면 없어진다. </p>
<p>local storage에 기록된 todo list는 새로고침해도
화면에 그려진채 있어야 한다. </p>
<p>그러기 위해서 우선 savedTodos를 변수로 만든다.</p>
<pre><code>const savedTodos = localStorage.getItem(&quot;todos&quot;)</code></pre><p>그런다음, 
저장된 todos가 존재한다면 
그것을 parse해주고, parse한 각각의 아이템을 화면에 리스트로 보여주어야 한다.</p>
<p>따라서 조건문을 통해 todos가 있는지 확인하고, 
parsedTodos 변수를 만든다.</p>
<pre><code>if (savedTodos !== null){
  const parsedTodos = JSON.parse(savedTodos);</code></pre><p>그리고 각각의 아이템을 paint 해준다.</p>
<pre><code>  parsedTodos.forEach(paintTodos);</code></pre><p>그런데 
const toDos = []
이 코드에서 빈 array로 toDos가 항상 세팅되기 때문에
예전 값만 저장하고 새로운 값이 저장되지 않는 문제가 있다. 
이것을 해결하기 위해
toDos array를 let으로 선언하고
parsed Todo를 toDos array에 할당해준다.</p>
<pre><code>const savedTodos = localStorage.getItem(&quot;todos&quot;)
console.log(savedTodos);
if (saveTodo !== null){
    const parsedTodos = JSON.parse(savedTodos);
    toDos = parsedTodos;
    parsedTodos.forEach(paintTodo);
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/25671941-e9a5-48aa-9fe8-a0e7e2dc616c/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.32.09.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-09.todo 저장하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-09.todo-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-09.todo-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 06 Jul 2021 14:46:03 GMT</pubDate>
            <description><![CDATA[<p>todo리스트를 저장하기 위해
우선 빈 array를 만든다.</p>
<pre><code>const toDos = []</code></pre><p>그런다음, 
newTodo가 생길때마다, todo에 push한다.</p>
<pre><code>function handleTodoSubmit(event){
    event.preventDefault();
    const newTodo = todoInput.value;
    toDos.push() = newTodo;
    paintTodo(newTodo);
    todoInput.value = &quot;&quot;;
}
</code></pre><p>console에서 toDos array에 변수가 잘 들어갔는지 확인한다. 
그러나 어차피 새로고침하면 없어지므로 local storage에 저장해야 한다. local storage에 toDos를 저장하는 함수를 만든다.</p>
<pre><code>function saveTodo(){
    localStorage.setItem(&quot;toDos&quot;, toDos);
}</code></pre><p>그리고 나서 submit 함수 내에서 saveTodo()를 호출한다.
그러면 application에서 key-value로 todo가 저장되는 것을 확인가능하다.</p>
<p>그러나 이것은 텍스트 값으로 저장된 것이라서
array로 저장하기 위해서는 JSON.stringify를 해줘야 한다.</p>
<pre><code>function saveTodo(){
    localStorage.setItem(&quot;toDos&quot;, JSON.stringify(toDos));
}</code></pre><p>그러면 [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]로 저장된다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/ca103da1-9264-41cd-8de9-62803901237e/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-06%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.45.57.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-08.todo list 삭제하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-08.todo-list-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-08.todo-list-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 06 Jul 2021 13:45:37 GMT</pubDate>
            <description><![CDATA[<p>작성해놓은 todo list를 삭제하기 위해서는
먼저 span 옆에 x 라는 버튼을 추가한다.</p>
<p>어차피 js 안에서 파일을 수정하고 html은 손대지 않는다.
다음의 코드를 추가한다.</p>
<pre><code>const button = document.createElement(&quot;button&quot;);
  li.appendChild(span);
  li.appendChild(button);
  span.innerText = newTodo;
  button.innerText = &quot;X&quot;;</code></pre><p>그리고 당연히 button이 클릭되었을 때 이벤트를 리슨해주어야 한다.</p>
<pre><code>button.addEventListener(&quot;click&quot;, deleteTodos);</code></pre><p>그런다음 deleteTodos 함수를 정의한다.
이 함수는 사용자가 클릭한 리스트를 찾아서 그것을 delete 해주어야 한다.
어떤 것이 클릭된 것인지 정확히 찾고 그것을 삭제해야 한다.
그래서 그 타겟이 어떤 것인지 정확히 찾는 변수를 할당해주어야 한다.
타겟 대상의 부모 객체(li)를 삭제해주기 위해 다음과 같이 작성한다.</p>
<pre><code>function deleteTodos(event) {
  const removingOne = event.target.parentElement;
  removingOne.remove();
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/95a7f858-a02b-4fea-83a6-50dfe38b6d49/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-06%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.45.28.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-07.todo list추가하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-07.todo-list%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-07.todo-list%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 06 Jul 2021 13:14:36 GMT</pubDate>
            <description><![CDATA[<p>우선 html에 영역을 만들어준다.</p>
<pre><code> &lt;form id=&quot;todo-form&quot;&gt;
        &lt;input required type=&quot;text&quot; placeholder=&quot;write todos&quot;&gt;
    &lt;/form&gt;
    &lt;ul id=&quot;todo-list&quot;&gt;&lt;/ul&gt;</code></pre><p>그다음에 todo.js에서 해당영역을 선택해 준다.</p>
<pre><code>const todoForm = document.getElementById(&quot;todo-form&quot;);
const todoList = document.getElementById(&quot;todo-list&quot;);
const todoInput = todoForm.querySelector(&quot;input&quot;);
</code></pre><p>form에 대한 event를 listen하기 위해 다음 코드를 추가해준다.</p>
<pre><code>todoForm.addEventListener(&quot;submit&quot;, handleSubmit);
</code></pre><p>그다음 함수에 대해 정의해준다.
자동으로 새로고침되는 것을 막고,
인풋에 추가되는 밸류를 newTodo로 할당한다. 그리고 밸류는 비운다.
그리고 newTodo 리스트는 새로운 함수로 만든다.</p>
<pre><code>function handleSubmit(event) {
  event.preventDefault();
  const newTodo = todoInput.value;
  todoInput.value = &quot;&quot;;
  paintTodos(newTodo);
}</code></pre><p>새로운 함수를 정의한다.
html에 li, span을 만들고, li의 차일드로 span을 지정한다.
span에 내부 텍스트로 newTodo를 할당하고,
todoList 영역에 li를 차일드로 지정해준다.</p>
<pre><code>function paintTodos(newTodo) {
  const li = document.createElement(&quot;li&quot;);
  const span = document.createElement(&quot;span&quot;);
  li.appendChild(span);
  span.innerText = newTodo;
  todoList.appendChild(li);
}</code></pre><p><img src="https://images.velog.io/images/chloe_park/post/02d78225-42db-437f-b34c-5b8f37c7e408/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-06%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.14.27.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-06. js에서 html에 요소 추가하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-06.-js%EC%97%90%EC%84%9C-html%EC%97%90-%EC%9A%94%EC%86%8C-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-06.-js%EC%97%90%EC%84%9C-html%EC%97%90-%EC%9A%94%EC%86%8C-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 05 Jul 2021 15:47:06 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/chloe_park/post/f80fdd8e-e7ec-48f4-ad4a-6111c18164f3/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-06%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.47.29.png" alt=""></p>
<p>js에서 html에 이미지를 추가해본다.
먼저, img 폴더를 만들고, 0.jpeg, 1.jpeg, 2.jpeg를 추가한다.</p>
<p>그리고 background.js 파일을 생성한다.
생성한 후 html에도 당연히 연결해준다.</p>
<p>background.js에는 img의 array를 만든다.</p>
<pre><code>const imges = [&quot;0.jpg&quot;, &quot;1.jpg&quot;, &quot;2.jpg&quot;];</code></pre><p>그리고 그 중에 하나를 랜덤하게 선택하는 const를 만든다.</p>
<pre><code>const chosenImg = imges[Math.floor(Math.random() * imges.length)];</code></pre><p>백그라운드 이미지에 대한 const도 만든다. 이때 
createElement(&quot;img&quot;)는 html 도큐먼트에 img 태그를 새롭게 생성해준다.</p>
<pre><code>const bgImg = document.createElement(&quot;img&quot;);</code></pre><p>그다음에 bg Img의 source를 chosen img로부터 랜덤하게 선택해준다.</p>
<pre><code>bgImg.src = `img/${chosenImg}`</code></pre><p>마지막으로, html의 body에 랜덤하게 선택되는 bgImg를 넣어준다.</p>
<pre><code>document.body.appendChild(bgImg);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-05. random quote출력하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-05.-random-quote%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-05.-random-quote%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 05 Jul 2021 14:41:09 GMT</pubDate>
            <description><![CDATA[<p>먼저 quote와 author의 세트를 quote.js파일로 만든다. </p>
<p><img src="https://images.velog.io/images/chloe_park/post/9061eeaa-34be-4a4d-a135-f0d0837da1ea/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.25.15.png" alt=""></p>
<p>html에 공간을 만들어 둔다. </p>
<pre><code>    &lt;div id=&quot;quote&quot;&gt;
        &lt;span&gt;&lt;/span&gt;
        &lt;span&gt;&lt;/span&gt;
    &lt;/div&gt;</code></pre><p>그리고 quotes.js를 html에 불러온다.</p>
<pre><code>&lt;script src=&quot;quote.js&quot;&gt;&lt;/script&gt;</code></pre><p>quotes.js에서 html의 quotes 영역을 선택한다.</p>
<pre><code>const quote = document.querySelector(&quot;#quote span:first-child&quot;);
const author = document.querySelector(&quot;#quote span:last-child&quot;);</code></pre><p>그다음에, quotes의 array에서 랜덤한 것을 선택하기 위해
Math.random()을 이용한다. </p>
<pre><code>const todaysQuote = quotes[Math.floor(Math.random()*quotes.length)];</code></pre><p>그리고 html에 quote와 author을 넣어주기 위해
아까 설정한 quote에 innerText 속성으로 오늘의 quote에 quote, author을 할당해준다.</p>
<pre><code>quote.innerText = todaysQuote.quote;
author.innerText = todaysQuote.author;</code></pre><p>마지막에 uncaught syntax error로 quote와 author가 이미 사용되었다고 나와서 애먹었다. 
아무리 array안에 있어도 중복되면 안되나보다. 변수명은 다른 이름으로 지어주는게 좋겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-04.clock만들기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-04.clock%EB%A7%8C%EB%93%A4%EA%B8%B0-nydfir4q</link>
            <guid>https://velog.io/@chloe_park/Javascript-04.clock%EB%A7%8C%EB%93%A4%EA%B8%B0-nydfir4q</guid>
            <pubDate>Mon, 05 Jul 2021 13:51:37 GMT</pubDate>
            <description><![CDATA[<p>clock을 만들기 위해
우선 html에 영역을 추가한다.</p>
<pre><code>&lt;h2 id=&quot;clock&quot;&gt;&lt;/h2&gt;</code></pre><p>이제 app.js에서 html의 영역을 선택한다.</p>
<pre><code>const clock = document.querySelector(&quot;h2#clock&quot;);</code></pre><p>다음으로 clock의 데이터를 가져올 수 있는 function을 만든다.
시, 분, 초는 각각 const로 만들어준다. 
그리고 clock 의 innerText로 시, 분, 초를 넣어준다.
padStart(유지하고자 하는 자릿수, 자릿수를 채우기위해 채워넣을 스트링) 으로
01, 02 같은 형태를 만들어 준다. 
padStart를 위해 가져온 시, 분, 초를 String화 해준다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/f1116c94-d039-45bc-a695-1a52c12e8852/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.49.26.png" alt=""></p>
<p>함수를 1초 단위로 호출하기 위해 setInterval 함수를 이용한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/b50644c4-035d-4e4f-9827-d5d7483d5dc7/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.51.18.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-03. Local Storage에 특정값 저장하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-03.-Local-Storage%EC%97%90-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-03.-Local-Storage%EC%97%90-%ED%8A%B9%EC%A0%95%EA%B0%92-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 04 Jul 2021 22:29:46 GMT</pubDate>
            <description><![CDATA[<p>local storage는 작은 DB와도 같음. 
setItem, getItem, removeItem이 가능함. 
console에서 localStorage.setItem(&quot;username&quot;, &quot;chloepark&quot;) 식으로
Key- Value의 조합으로 저장 가능함. </p>
<p>이것을 활용해, 
자바스크립트에서 사용자의 인풋값을 저장해두고
사용자가 다시 로그인했을때 저장된 인풋값을 활용할 수 있음. </p>
<pre><code>localStorage.setItem(&quot;username&quot;, username)</code></pre><p>을 추가해서 사용자로부터 받은 유저이름을 저장함. (변수명, 변수) 임</p>
<p>만약 localStorage에 username이 없으면
form을 표시해서 사용자의 인풋을 기다리고</p>
<p>username이 있으면
form을 표시하지 않고 저장된 username을 활용함</p>
<p>이를 위해 우선
localStorage에서 가져온 username을 const로 저장</p>
<pre><code>const savedUsername = localStorage.getItem(&quot;username&quot;)</code></pre><p>만약 localStorage에 username이 없으면
form의 숨김 기능을 제거해야 하는데
이를 위해 html에서 우선 form의 class에 hidden을 추가</p>
<p>만약 username이 저장돼 있으면, 
loginform을 표시하기 위해 hidden을 제거하고,
addEventListener를 조건문 안에 넣어서 
사용자의 이름이 없을 경우 이벤트에 대한 함수가 실행되게 함</p>
<pre><code>const savedUsername = localStorage.getItem(&quot;username&quot;); 

if (savedUsername === null) {
    loginForm.classList.remove(&quot;hidden&quot;)
    loginForm.addEventListener(&quot;submit&quot;, handleSubmitBtn)</code></pre><p>사용자의 이름이 있을 경우에는
h1이 표시되면 되는데, else 조건문 뒤에
greeting의 hidden을 제거</p>
<pre><code>} else {
    greeting.classList.remove(&quot;hidden&quot;)
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript-02. 사용자의 인풋을 화면에 출력하기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-02.-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%9D%B8%ED%92%8B%EC%9D%84-%ED%99%94%EB%A9%B4%EC%97%90-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-02.-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%9D%B8%ED%92%8B%EC%9D%84-%ED%99%94%EB%A9%B4%EC%97%90-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 04 Jul 2021 15:59:38 GMT</pubDate>
            <description><![CDATA[<p>Javascript-01에 이어서 사용자의 인풋을 화면에 출력하는 방법이다. </p>
<p>사용자가 이름을 넣고 제출 버튼을 누르면, </p>
<p>제출 버튼 양식이 없어지고 
h1으로 환영 메시지가 나타나게 해본다. </p>
<p>그러려면 h1 태그를 html의 form태그 아래에 추가한다. 기본적으로는 h1이 숨겨져 있고, 사용자가 이름을 제출해야만 h1이 표시되도록 한다. 그러기 위해서 class를 hidden으로 하고, </p>
<p><img src="https://images.velog.io/images/chloe_park/post/c0d00f8d-af1e-4cc0-82cd-39209ed1e344/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.41.19.png" alt=""></p>
<p>hidden일 때 숨겨지도록 하기 위해 style.css에 display를 none으로 설정한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/edfd30e3-24a6-4767-97e3-da35dbcfa266/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.42.04.png" alt=""></p>
<p>style.css가 추가되었으므로 당연히 index.html에 style.css를 연결해준다. </p>
<p><img src="https://images.velog.io/images/chloe_park/post/23876117-d081-48d3-bc73-795f60a5a48b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.52.45.png" alt=""></p>
<p>제출 버튼을 눌렀을때 form 태그부분이 사라져야 하므로 
loginForm.classList.add(&quot;hidden&quot;)을 추가한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/05cdf544-eb0b-468f-9571-863328b88245/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.54.33.png" alt=""></p>
<p>입력받은 사용자 이름으로 환영인사를 하기 위해 html에 greeting 태그를 추가한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/9af1a83a-f294-424d-bb55-86521b92ae52/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.55.54.png" alt=""></p>
<p>다시 app.js에서 우선 greeting 을 선택해주고,
greeting의 innerText를 변경해준다음, 
hidden을 제거해준다. </p>
<p><img src="https://images.velog.io/images/chloe_park/post/5788b334-bb3d-4b15-8639-6687e8693884/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.59.20.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript -01. js에서 사용자의 인풋 가져오기]]></title>
            <link>https://velog.io/@chloe_park/Javascript-01.-js%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%9D%B8%ED%92%8B-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@chloe_park/Javascript-01.-js%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%9D%B8%ED%92%8B-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Sun, 04 Jul 2021 15:37:05 GMT</pubDate>
            <description><![CDATA[<p>자바스크립트에서 사용자의 인풋을 받는 것은 간단하다.</p>
<p>우선 index.html에, script src를 통해 app.js를 연결해 준다.</p>
<p>그리고 form태그를 만든 후 자바스크립트에서 form을 제어하면 된다. </p>
<p><img src="https://images.velog.io/images/chloe_park/post/664bb274-00e2-4748-8ec5-735684a5c997/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.32.06.png" alt=""></p>
<p>이제 app.js에서 
우선 form 태그부분과
login Input 부분을 선택한다.
<img src="https://images.velog.io/images/chloe_park/post/6d8877c4-5067-4547-a24b-b85f27bba538/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.33.35.png" alt=""></p>
<p>그런 다음, </p>
<p>form에서 사용자가 제출 버튼을 눌렀을 때 인풋을 가져오기 위해,
addEventListener함수를 통해 
Event를 감지한다. 
<img src="https://images.velog.io/images/chloe_park/post/56172425-6fde-44b5-a096-fe64c502a423/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.34.57.png" alt=""></p>
<p>마지막으로 미리 이름을 설정해두었던 &#39;제출 버튼을 누르면 사용자의 이름을 가져오는&quot;
함수를 정의한다.</p>
<p><img src="https://images.velog.io/images/chloe_park/post/41809b8a-1e63-4a0d-8cec-6f35521c137d/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-05%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.35.41.png" alt=""></p>
<p>제출 버튼을 누르면 기본 디폴트로 새로고침되기 때문에
preventDefault()를 통해 새로고침을 막아준다.
주의할점은 argument로 event를 넣어주어야 한다는 것이다.
그리고 인풋에서 밸류를 가져와 username에 할당하고
마지막으로 username을 console에 log한다.</p>
]]></description>
        </item>
    </channel>
</rss>