<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>NULL</title>
    <link>https://1924.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 12 Aug 2026 04:16:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>1924</managingEditor>
    <item>
      <title>1</title>
      <link>https://1924.tistory.com/484</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urVGh/btsGYL8vIlS/KPWKJJEnvpk5syFNGPwxF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urVGh/btsGYL8vIlS/KPWKJJEnvpk5syFNGPwxF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urVGh/btsGYL8vIlS/KPWKJJEnvpk5syFNGPwxF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurVGh%2FbtsGYL8vIlS%2FKPWKJJEnvpk5syFNGPwxF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;252&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnEvmH/btsGXZ7idpv/0AzDnjtxp5WQSTTPmpZNSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnEvmH/btsGXZ7idpv/0AzDnjtxp5WQSTTPmpZNSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnEvmH/btsGXZ7idpv/0AzDnjtxp5WQSTTPmpZNSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnEvmH%2FbtsGXZ7idpv%2F0AzDnjtxp5WQSTTPmpZNSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1004&quot; height=&quot;298&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8ARl4/btsGYPQxtzi/hLbXxnbb7beiHSBFotLrn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8ARl4/btsGYPQxtzi/hLbXxnbb7beiHSBFotLrn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8ARl4/btsGYPQxtzi/hLbXxnbb7beiHSBFotLrn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8ARl4%2FbtsGYPQxtzi%2FhLbXxnbb7beiHSBFotLrn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;518&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWpZu1/btsGZMFw1fO/1tCZl4DNZtarMo2vIAVCzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWpZu1/btsGZMFw1fO/1tCZl4DNZtarMo2vIAVCzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWpZu1/btsGZMFw1fO/1tCZl4DNZtarMo2vIAVCzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWpZu1%2FbtsGZMFw1fO%2F1tCZl4DNZtarMo2vIAVCzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1067&quot; height=&quot;283&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eot7nP/btsGX0L5rRO/XxCi2FMFs09kShTdLngUxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eot7nP/btsGX0L5rRO/XxCi2FMFs09kShTdLngUxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eot7nP/btsGX0L5rRO/XxCi2FMFs09kShTdLngUxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feot7nP%2FbtsGX0L5rRO%2FXxCi2FMFs09kShTdLngUxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1055&quot; height=&quot;393&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원형&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2sng3/btsGZXGNJPn/m6KD8oRCeZfkVGXToeubJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2sng3/btsGZXGNJPn/m6KD8oRCeZfkVGXToeubJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2sng3/btsGZXGNJPn/m6KD8oRCeZfkVGXToeubJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2sng3%2FbtsGZXGNJPn%2Fm6KD8oRCeZfkVGXToeubJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;921&quot; height=&quot;396&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ILBw4/btsGYfbit8F/KKLhxCqwL6E6mjP8OKkzq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ILBw4/btsGYfbit8F/KKLhxCqwL6E6mjP8OKkzq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ILBw4/btsGYfbit8F/KKLhxCqwL6E6mjP8OKkzq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FILBw4%2FbtsGYfbit8F%2FKKLhxCqwL6E6mjP8OKkzq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;264&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWhCY5/btsG0sVXuYR/E1Z2bO12mZ4ngM6Im1Eke1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWhCY5/btsG0sVXuYR/E1Z2bO12mZ4ngM6Im1Eke1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWhCY5/btsG0sVXuYR/E1Z2bO12mZ4ngM6Im1Eke1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWhCY5%2FbtsG0sVXuYR%2FE1Z2bO12mZ4ngM6Im1Eke1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;921&quot; height=&quot;489&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1OrTF/btsG0d5MVKb/pVKGkYcSDpogYg6rzV9nw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1OrTF/btsG0d5MVKb/pVKGkYcSDpogYg6rzV9nw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1OrTF/btsG0d5MVKb/pVKGkYcSDpogYg6rzV9nw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1OrTF%2FbtsG0d5MVKb%2FpVKGkYcSDpogYg6rzV9nw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1114&quot; height=&quot;408&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/484</guid>
      <comments>https://1924.tistory.com/484#entry484comment</comments>
      <pubDate>Fri, 26 Apr 2024 17:25:48 +0900</pubDate>
    </item>
    <item>
      <title>react-router-dom navigation props보내기</title>
      <link>https://1924.tistory.com/483</link>
      <description>&lt;pre id=&quot;code_1697935188545&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;navigation(&quot;/search&quot;, {
        state: {
          value: e.target.value,
          movieData: props.movieData,
          tvData: props.tvData,
        },
      });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input검색창에서 값을 입력받으면 검색결과 컴포넌트로 props을 보내고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알아보니 해당 url파라미터와 state을 이용해서 원하는 컴포넌트 링크로 props을 보낼 수 있었다.&lt;/p&gt;</description>
      <category>Front-end/React</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/483</guid>
      <comments>https://1924.tistory.com/483#entry483comment</comments>
      <pubDate>Sun, 22 Oct 2023 09:41:23 +0900</pubDate>
    </item>
    <item>
      <title>카드가 부모 요소를 벗어나도록 허용하는 visible</title>
      <link>https://1924.tistory.com/482</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;제목과 동일하게 슬라이드 퍼블리싱에 애니메이션 효과를 입히는 도중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확대되면서 크기가 부모 요소를 벗어나도록 되어있는 애니메이션을 구현 중이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모 요소에 크기가 고정으로 설정되어있어서 어떻게 해결할지 찾는 도중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모 요소를 벗어나도록 허용하여 화면에서 잘림없이 애니메이션을 처리 할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 overflow: visible을 찾아서 해결하였다.&lt;/p&gt;</description>
      <category>Front-end/HTML,CSS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/482</guid>
      <comments>https://1924.tistory.com/482#entry482comment</comments>
      <pubDate>Sat, 21 Oct 2023 08:53:08 +0900</pubDate>
    </item>
    <item>
      <title>Framer-Motion scroll 애니메이션 다루기</title>
      <link>https://1924.tistory.com/481</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;NetFlix클론을 하다가 Navbar에 일정 스크롤을 내리면 불투명도를 주고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수 많은 방법이 있지만 그 중에서 Framer-Motion을 통해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 애니메이션으로 처리할 수 있는 방법을 선택하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697374688004&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const { scrollY } = useScroll();
  const bg = useTransform(
    scrollY,
    [0, 80],
    ['rgba(0,0,0,1)', 'rgba(0,0,0,0.5)']
  );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;scrollY :&lt;/b&gt;&amp;nbsp;사용자의 스크롤 동작에 따라 동적으로 업데이트되는 스크롤 위치를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[0, 80] :&lt;/b&gt; 입력 범위로, 여기서 0은 스크롤의 시작을 나타내고, 80은 스크롤 범위의 끝을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이 범위는 스크롤 위치에 따라 배경 색상의 전환을 결정하는데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;['rgba(0,0,0,1)', 'rgba(0,0,0,0.5)'] :&amp;nbsp;&lt;/b&gt;스크롤 위치에 따른 배경 색상의 전환을 정의하는 배열이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 위치가 0일 때는 완전히 불투명한 검정색 (rgba(0,0,0,1)이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 위치가 80일 때는 반투명한 검정색 (rgba(0,0,0,0.5))으로 전환 된다.&lt;/p&gt;</description>
      <category>Front-end/React</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/481</guid>
      <comments>https://1924.tistory.com/481#entry481comment</comments>
      <pubDate>Sun, 15 Oct 2023 22:29:33 +0900</pubDate>
    </item>
    <item>
      <title>react-hook-form 이벤트 등록, input값 얻기</title>
      <link>https://1924.tistory.com/480</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;react-hook-form을 다루면서 마주했던 오류를 기록하는 회고록이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS는 styled-components를 사용했다.&lt;/p&gt;
&lt;pre id=&quot;code_1696969615772&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;Input
    	onChange={onChangeHandler}
            type=&quot;text&quot;
            {...register(&quot;id&quot;, {
              required: true,
              pattern: /^[a-z0-9]+@[a-z]+\.[a-z]{2,3}$/i,
            })}
            aria-invalid={errors.id ? &quot;true&quot; : &quot;false&quot;}
            placeholder=&quot;이메일을 입력해주세요.&quot;
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input컴포넌트에서 onChange이벤트를 등록하고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 onChange이벤트를 넣어줬는데 동작하지않는 상황에 직면하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링으로 찾아보니 react-hook-form만의 사용방법이 따로 존재하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결방법은 간단하다.&lt;/p&gt;
&lt;pre id=&quot;code_1696969818136&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Input
    	onChange={onChangeHandler}
            type=&quot;text&quot;
            {...register(&quot;id&quot;, {
              required: true,
              pattern: /^[a-z0-9]+@[a-z]+\.[a-z]{2,3}$/i,
              onChange: (e) =&amp;gt; onChangeHandler(e),
            })}
            aria-invalid={errors.id ? &quot;true&quot; : &quot;false&quot;}
            placeholder=&quot;이메일을 입력해주세요.&quot;
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;register함수 옵션안에 이벤트를 등록해주었더니 해결되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고링크 : &lt;a href=&quot;https://velog.io/@rlorxl/react-hook-form-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EC%8A%88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@rlorxl/react-hook-form-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EC%8A%88&lt;/a&gt;&lt;/p&gt;</description>
      <category>Front-end/React</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/480</guid>
      <comments>https://1924.tistory.com/480#entry480comment</comments>
      <pubDate>Wed, 11 Oct 2023 05:35:40 +0900</pubDate>
    </item>
    <item>
      <title>array와 Object 개념정리</title>
      <link>https://1924.tistory.com/283</link>
      <description>&lt;pre id=&quot;code_1657664129716&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var car = ['소나타', 50000, 'asd'];
// array 
console.log(car);


var car2 = {name: '소나타', price : 50000};
// object자료형
//key : value형태로 저장가능한게 장점.
// 실제 저장되는 값은 value이고 key는 자료의 이름이다.


console.log(car2.name); // 사용방법 1
console.log(car2['price']);// 사용방법 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array/Object 차이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array는 순서개념이 존재한다. (왼쪽에서 오른쪽으로 가는 순서)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;하지만 Object는 순서개념이 없다. (어느 곳에 위치하든 순서영향이 없다.)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;순서개념이 존재하는 array는&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;- 0번부터 0번까지 자르기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;- 0번 바꾸기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;- 맨 뒤, 맨 앞에 자료 넣기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;- 값이 존재하는지 검색&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;등등 순서개념이 필요한 많은 것을 할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array자료.sort() 하면 가나다순 정렬되고&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array자료.slice(x, y) 하면 x번부터 y번 전까지 자를 수 있고 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array자료.push(x) 하면 x를 맨 뒤에 입력할 수 있고&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;이런 기본함수들이 준비되어있다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;이외에&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;array 자료 조작이 필요할 때 검색을 통해 알맞게 사용한다. &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-end/Vanilla JS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/283</guid>
      <comments>https://1924.tistory.com/283#entry283comment</comments>
      <pubDate>Wed, 13 Jul 2022 13:17:28 +0900</pubDate>
    </item>
    <item>
      <title>JS 이벤트 버블링</title>
      <link>https://1924.tistory.com/279</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이벤트 버블링&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 html태그에 이벤트가 발생하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;그 html의 상위요소까지 이벤트가 실행되는 현상을 이벤트 버블링&lt;/b&gt;&lt;/span&gt;이라고 한다. &lt;br /&gt;&lt;br /&gt;click이라는 이벤트를 예로 들자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html 태그에 클릭이 발생하면 그의 모든 상위요소까지 자동으로 클릭이 된다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651687507526&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;p&amp;gt;hello&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의&amp;nbsp;코드를&amp;nbsp;보면&amp;nbsp;p태그의&amp;nbsp;hello라는&amp;nbsp;글자를&amp;nbsp;클릭하게&amp;nbsp;되면 &lt;br /&gt;브라우저는&amp;nbsp;사용자가&amp;nbsp;클릭을&amp;nbsp;총&amp;nbsp;3번&amp;nbsp;했다고&amp;nbsp;인지한다. &lt;br /&gt;&lt;br /&gt;예&amp;nbsp;)&amp;nbsp;p위에&amp;nbsp;div와&amp;nbsp;그&amp;nbsp;위의&amp;nbsp;div &lt;br /&gt;&lt;br /&gt;위와&amp;nbsp;같은&amp;nbsp;현상이&amp;nbsp;이벤트&amp;nbsp;버블링이다. &lt;br /&gt;&lt;br /&gt;브라우저는&amp;nbsp;원래&amp;nbsp;이렇게&amp;nbsp;동작하도록&amp;nbsp;되어있으며 &lt;br /&gt;이&amp;nbsp;사실을&amp;nbsp;잊은&amp;nbsp;채&amp;nbsp;코드를&amp;nbsp;짜다보면&amp;nbsp;가끔&amp;nbsp;이상한&amp;nbsp;현상이&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651688604781&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;black-bg&quot;&amp;gt; (&amp;larr; 해당 창을 누르면 모달창 닫으라는 코드를 짬)
  &amp;lt;div class=&quot;white-bg&quot;&amp;gt;
    모달창 내용
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 &amp;lt;div class=&quot;white-bg&quot;&amp;gt; 이거 클릭해도&lt;br /&gt;이벤트&amp;nbsp;버블링&amp;nbsp;때문에&amp;nbsp;&amp;lt;div&amp;nbsp;class=&quot;black-bg&quot;&amp;gt;&amp;nbsp;이것도&amp;nbsp;클릭한&amp;nbsp;것이&amp;nbsp;된다. &lt;br /&gt;&lt;br /&gt;그래서 거기 붙어있던 이벤트리스너가 동작해서 모달창을 닫아주게 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이러한&amp;nbsp;문제를&amp;nbsp;해결하기&amp;nbsp;위해&amp;nbsp;자주&amp;nbsp;사용하는&amp;nbsp;이벤트&amp;nbsp;관련&amp;nbsp;함수/메소드가&amp;nbsp;존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이벤트리스너 안에서 쓰는 이벤트 함수들&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651688765903&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.querySelector('.black-bg').addEventListener('click', function(e){
  e.target;
  e.currentTarget;
  e.preventDefault();
  e.stopPropagation();
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트리스너 콜백함수에 파라미터에 아무거나 추가해도 되지만&lt;br /&gt;주로&amp;nbsp;event의&amp;nbsp;약자인&amp;nbsp;e를&amp;nbsp;추가하는&amp;nbsp;편이다. &lt;br /&gt;&lt;br /&gt;이로써&amp;nbsp;이벤트관련&amp;nbsp;유용한&amp;nbsp;함수들을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;각 메소드의 역할 ★&lt;b&gt;★&lt;/b&gt;&lt;b&gt;★&lt;/b&gt;&lt;b&gt;★&lt;/b&gt;&lt;b&gt;★&lt;/b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. e.target은 실제 클릭한 요소 알려줌 (이벤트 발생한 곳) &lt;br /&gt;2. e.currentTarget은 지금 이벤트리스너가 달린 곳 알려줌 (참고로 this라고 써도 똑같음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. e.preventDefault() 실행하면 이벤트 기본 동작을 막아줌 &lt;br /&gt;4. e.stopPropagation() 실행하면 내 상위요소로의 이벤트 버블링을 중단해줌 &lt;br /&gt;&lt;br /&gt;이외에&amp;nbsp;여러가지가&amp;nbsp;존재하며&amp;nbsp;필요할때마다&amp;nbsp;검색해서&amp;nbsp;쓰면&amp;nbsp;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중에서&amp;nbsp;가장&amp;nbsp;중요한건&amp;nbsp;e.target이다. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이벤트 버블링이 일어난다면&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;사용자가&amp;nbsp;실제로&amp;nbsp;클릭한&amp;nbsp;요소를&amp;nbsp;e.target으로&amp;nbsp;찾아&amp;nbsp;낼&amp;nbsp;수&amp;nbsp;있다.&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651691481483&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const bg = document.querySelector(&quot;.black-bg&quot;);

bg.addEventListener(&quot;click&quot;, function(e){
    if(e.target == bg){
        bg.style.display = &quot;none&quot;;
    }
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&amp;nbsp;조건식에&amp;nbsp;e.currentTarget&amp;nbsp;출력해보면&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;e.currentTarget은&amp;nbsp;해당&amp;nbsp;이벤트리스너를&amp;nbsp;가리킨다. &lt;br /&gt;&lt;br /&gt;즉 bg(검은 배경)을 가리키게 되서 조건이 true가 된다. &lt;br /&gt;this도&amp;nbsp;마찬가지이다. &lt;br /&gt;&lt;br /&gt;따라서 &lt;br /&gt;&lt;br /&gt;e.target&amp;nbsp;==&amp;nbsp;e.currentTarget&amp;nbsp;혹은 &lt;br /&gt;&lt;br /&gt;e.target&amp;nbsp;==&amp;nbsp;this&amp;nbsp;이렇게&amp;nbsp;써도&amp;nbsp;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제이쿼리에서 사용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jQuery 셀렉터로 찾은 결과와&lt;br /&gt;querySelector&amp;nbsp;셀렉터로&amp;nbsp;찾은&amp;nbsp;결과는&amp;nbsp;다르게&amp;nbsp;생겼다. &lt;br /&gt;&lt;br /&gt;출력해보면&amp;nbsp;전자는&amp;nbsp;이상한&amp;nbsp;object&amp;nbsp;이런게&amp;nbsp;나오고&amp;nbsp;후자는&amp;nbsp;&amp;lt;html&amp;gt;&amp;nbsp;이런게&amp;nbsp;나온다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;그래서&amp;nbsp;e.target&amp;nbsp;==&amp;nbsp;$('.black-bg')&amp;nbsp;이건&amp;nbsp;사용불가능하며 &lt;br /&gt;그리고&amp;nbsp;애초에&amp;nbsp;jQuery&amp;nbsp;셀렉터끼리&amp;nbsp;등호비교는&amp;nbsp;불가능하다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;제이쿼리에서는&amp;nbsp;&amp;nbsp; &lt;br /&gt;$('.black-bg').is($('.black-bg'))&amp;nbsp;와&amp;nbsp;같은&amp;nbsp;비교용&amp;nbsp;함수를&amp;nbsp;사용하면&amp;nbsp;된다. &lt;br /&gt;&lt;br /&gt;위&amp;nbsp;코드에서는&amp;nbsp;$(e.target).is($('.black-bg'))&amp;nbsp;를&amp;nbsp;사용하면&amp;nbsp;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-end/Vanilla JS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/279</guid>
      <comments>https://1924.tistory.com/279#entry279comment</comments>
      <pubDate>Thu, 5 May 2022 04:17:11 +0900</pubDate>
    </item>
    <item>
      <title>js, jquery 퍼센트 스크롤</title>
      <link>https://1924.tistory.com/278</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;js. jquery 퍼센트 스크롤&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS&lt;/p&gt;
&lt;pre id=&quot;code_1651390768871&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.addEventListener(&quot;scroll&quot;, function () {
    var per = ((window.scrollY / (document.body.clientHeight - window.innerHeight)) * 100);
    box.style.width = per + &quot;%&quot;;
    console.log(per.toFixed(0) + &quot;%&quot;);
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jquery&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651390840767&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(window).on(&quot;scroll&quot;, function(){
    var percent = ($(window).scrollTop() / ($(document).height() - $(window).height())) * 100;
    $('.box__width').css('width', percent+&quot;%&quot;);
    console.log(percent.toFixed(0) + &quot;%&quot;);
})&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스크롤&amp;nbsp;다룰&amp;nbsp;때&amp;nbsp;주의점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1. 스크롤 이벤트리스너 안의 코드는 1초에 60번 이상 실행된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그래서&amp;nbsp;스크롤&amp;nbsp;이벤트리스너는&amp;nbsp;많이&amp;nbsp;달면&amp;nbsp;성능저하가&amp;nbsp;일어나니&amp;nbsp;스크롤바&amp;nbsp;1개마다&amp;nbsp;1개만&amp;nbsp;쓰는걸&amp;nbsp;권장한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2. 스크롤이벤트리스너 안의 코드는 1초에 여러번 실행되다보니 바닥체크하는 코드도 여러번 실행될 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그래서&amp;nbsp;이에&amp;nbsp;대해&amp;nbsp;처리를&amp;nbsp;해줘야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-end/Vanilla JS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/278</guid>
      <comments>https://1924.tistory.com/278#entry278comment</comments>
      <pubDate>Sun, 1 May 2022 16:44:44 +0900</pubDate>
    </item>
    <item>
      <title>스크롤(scroll) 이벤트 사용법</title>
      <link>https://1924.tistory.com/277</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스크롤 이벤트리스너&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1649924035913&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.addEventListener('scroll', function(){
  console.log('123')
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤바를&amp;nbsp;조작하면&amp;nbsp;scroll&amp;nbsp;이벤트가&amp;nbsp;발생한다. &lt;br /&gt;그래서&amp;nbsp;scroll&amp;nbsp;이벤트리스너를&amp;nbsp;전체&amp;nbsp;페이지에&amp;nbsp;달면 &lt;br /&gt;&lt;br /&gt;전체 페이지를 스크롤할 때마다 원하는 코드를 실행할 수 있다.&lt;br /&gt;코드를&amp;nbsp;실행하고&amp;nbsp;스크롤을&amp;nbsp;조작하면&amp;nbsp;할때마다&amp;nbsp;123이&amp;nbsp;콘솔에&amp;nbsp;출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIiEi/btrzpsBU4yS/BvvjKaa41CuFWKYbNaCk7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIiEi/btrzpsBU4yS/BvvjKaa41CuFWKYbNaCk7K/img.png&quot; data-alt=&quot;window 범위&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIiEi/btrzpsBU4yS/BvvjKaa41CuFWKYbNaCk7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIiEi%2FbtrzpsBU4yS%2FBvvjKaa41CuFWKYbNaCk7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;241&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;window 범위&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;참고로 window는 그냥 전체 페이지를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;document도 전체 페이지인데 window가 약간 더 큰 개념이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scroll 이벤트리스너는 관습적으로 window에 붙인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스크롤&amp;nbsp;관련&amp;nbsp;유용한&amp;nbsp;기능들&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1649924241334&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.addEventListener('scroll', function(){
  console.log( window.scrollY )
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;-매우유용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;window.scrollY 사용하면 현재 페이지를 얼마나 위에서 부터 스크롤했는지 px 단위로 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;window.scrollX&amp;nbsp;는&amp;nbsp;마찬가지로&amp;nbsp;가로로&amp;nbsp;얼마나&amp;nbsp;스크롤했는지&amp;nbsp;알려준다.&amp;nbsp;(가로&amp;nbsp;스크롤바가&amp;nbsp;있으면)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649924363381&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.scrollTo(0, 100)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;window.scrollTo(x, y) 실행하면 강제로 스크롤바를 움직일 수 있다.&lt;br /&gt;위&amp;nbsp;코드는&amp;nbsp;위에서부터&amp;nbsp;100px&amp;nbsp;위치로&amp;nbsp;스크롤해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649924450591&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.scrollBy(0, 100)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;window.scrollBy(x,&amp;nbsp;y)&amp;nbsp;실행하면&amp;nbsp;현재&amp;nbsp;위치에서부터&amp;nbsp;스크롤해준다. &lt;br /&gt;&lt;br /&gt;위&amp;nbsp;코드는&amp;nbsp;현재&amp;nbsp;위치에서부터&amp;nbsp;+100px&amp;nbsp;만큼&amp;nbsp;스크롤해준다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;원래&amp;nbsp;이&amp;nbsp;코드를&amp;nbsp;실행하면&amp;nbsp;스크롤&amp;nbsp;위치가&amp;nbsp;순간이동되는데 &lt;br /&gt;bootstrap을&amp;nbsp;설치했을&amp;nbsp;경우&amp;nbsp;이상하게&amp;nbsp;천천히&amp;nbsp;이동된다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;것을&amp;nbsp;원치&amp;nbsp;않는다면&amp;nbsp;css파일&amp;nbsp;맨&amp;nbsp;위에&amp;nbsp;:root&amp;nbsp;{&amp;nbsp;scroll-behavior&amp;nbsp;:&amp;nbsp;auto&amp;nbsp;}를&amp;nbsp;추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제이쿼리(jQuery) 스크롤&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1649924652144&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(window).on('scroll', function(){
  $(window).scrollTop();
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제이쿼리는&amp;nbsp;더&amp;nbsp;짧다. &lt;br /&gt;&lt;br /&gt;$(window).scrollTop()를 사용하면 위와 같이 현재 페이지 스크롤 양을 알려주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;더 간편한 건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(window).scrollTop(100) 를 쓰면 페이지 강제이동도 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;박스&amp;nbsp;끝까지&amp;nbsp;스크롤시&amp;nbsp;알림띄우기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이용약관을&amp;nbsp;다&amp;nbsp;읽으면&amp;nbsp;알림창&amp;nbsp;등을&amp;nbsp;띄우게&amp;nbsp;하고&amp;nbsp;싶다. &lt;br /&gt;다&amp;nbsp;읽은&amp;nbsp;것을&amp;nbsp;확인하기&amp;nbsp;위해서는&amp;nbsp;스크롤을&amp;nbsp;다&amp;nbsp;내렸는지&amp;nbsp;확인해야한다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;div&amp;nbsp;스크롤바&amp;nbsp;내린&amp;nbsp;양&amp;nbsp;==&amp;nbsp;div&amp;nbsp;실제높이일&amp;nbsp;경우 &lt;br /&gt;2.&amp;nbsp;알림창(alert)을&amp;nbsp;띄운다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;div 스크롤바 내린 양 구하는법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;박스를 셀렉터로 찾고 .scrollTop 붙이면 스크롤바를 위에서 부터 얼마나 내렸는지 알려줍니다.&lt;br /&gt;해당&amp;nbsp;박스의&amp;nbsp;셀렉터&amp;nbsp;뒤에&amp;nbsp;.scrollTop을&amp;nbsp;쓰면&amp;nbsp;위에서부터&amp;nbsp;얼마나&amp;nbsp;내렸는지&amp;nbsp;알려준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JS&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649929892341&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const lorem = document.querySelector(&quot;.lorem&quot;);

lorem.addEventListener('scroll', function(){
    console.log( lorem.scrollTop);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jQuery&lt;/p&gt;
&lt;pre id=&quot;code_1649929917702&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$('.lorem').on('scroll', function(){
  var 스크롤양 = document.querySelector('.lorem').scrollTop;
  console.log(스크롤양);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;div 박스 높이 구하는 법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스크롤바가 생긴 박스의 경우 스크롤가능한 실제높이가 궁금한 경우&lt;br /&gt;셀렉터로&amp;nbsp;찾아서&amp;nbsp;.scrollHeight&amp;nbsp;붙이면&amp;nbsp;나온다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JS&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649930420851&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lorem.addEventListener('scroll', function(){
    console.log( lorem.scrollTop);
    console.log( lorem.scrollHeight);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jQuery&lt;/p&gt;
&lt;pre id=&quot;code_1649930436054&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$('.lorem').on('scroll', function(){
  var 스크롤양 = document.querySelector('.lorem').scrollTop;
  var 실제높이 = document.querySelector('.lorem').scrollHeight;
  console.log(스크롤양, 실제높이);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;박스가&amp;nbsp;화면에&amp;nbsp;보이는&amp;nbsp;부분&amp;nbsp;높이는&amp;nbsp;.clientHeight&amp;nbsp;하면&amp;nbsp;나옵니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 것은 일반 css로 설정한 height값 즉, 화면에 그대로 보이는 세로 값이 나옵니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;이제 위와 같이 div 스크롤바 내린 양 == div 실제높이를 하려고 하는데 &lt;br /&gt;&lt;br /&gt;확인해보니&amp;nbsp;스크롤바를&amp;nbsp;끝까지&amp;nbsp;내려도&amp;nbsp;260이&amp;nbsp;나오고 &lt;br /&gt;div&amp;nbsp;실제&amp;nbsp;높이는&amp;nbsp;360이&amp;nbsp;나온다. &lt;br /&gt;&lt;br /&gt;같다고&amp;nbsp;비교하면&amp;nbsp;조건성립이&amp;nbsp;불가능하다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게&amp;nbsp;서로&amp;nbsp;값이&amp;nbsp;맞지&amp;nbsp;않는&amp;nbsp;이유는 &lt;br /&gt;&lt;br /&gt;스크롤바 내린 양은 진짜 스크롤바만 내린 양 뿐이고, &lt;br /&gt;박스가&amp;nbsp;보이는&amp;nbsp;높이는&amp;nbsp;포함하지&amp;nbsp;않아서&amp;nbsp;그렇다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;따라서&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;div&amp;nbsp;스크롤바&amp;nbsp;내린&amp;nbsp;양&amp;nbsp;+&amp;nbsp;div가&amp;nbsp;화면에&amp;nbsp;보이는&amp;nbsp;높이&amp;nbsp;==&amp;nbsp;div&amp;nbsp;실제높이일&amp;nbsp;경우&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;( lorem.scrollTop + lorem.clientHeight == lorem.scrollHeight )&lt;br /&gt;를&amp;nbsp;조건으로&amp;nbsp;하면&amp;nbsp;성립된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;여기서&amp;nbsp;주의할&amp;nbsp;것은 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;스크롤 내린 양은 정수단위로 나오지 않고&lt;br /&gt;OS&amp;nbsp;마다&amp;nbsp;부정확해서&amp;nbsp;여유를&amp;nbsp;두고&amp;nbsp;비교해야한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;그래서&amp;nbsp;끝까지&amp;nbsp;스크롤&amp;nbsp;한&amp;nbsp;값이&amp;nbsp;아닌&amp;nbsp;오차범위를&amp;nbsp;생각해서 &lt;br /&gt;&lt;br /&gt;끝에서&amp;nbsp;10px정도를&amp;nbsp;남기고&amp;nbsp;기준으로&amp;nbsp;잡는게&amp;nbsp;좋다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;10px정도 남긴 기준&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;JS&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649941817129&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lorem.addEventListener('scroll', function(){
    if(lorem.scrollTop + lorem.clientHeight &amp;gt;= lorem.scrollHeight-10){
        alert(&quot;통과&quot;);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jQuery&lt;/p&gt;
&lt;pre id=&quot;code_1649942779968&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lorem.on(&quot;scroll&quot;, function(){
    if(lorem.scrollTop() + lorem.innerHeight() &amp;gt;= lorem.prop('scrollHeight')-10){
        alert(&quot;통과&quot;);
    }
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651493091967&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$('.lorem').on('scroll', function(){
  var 스크롤양 = document.querySelector('.lorem').scrollTop;
  var 실제높이 = document.querySelector('.lorem').scrollHeight;
  var 높이 = document.querySelector('.lorem').clientHeight;
  if (스크롤양 + 높이 &amp;gt; 실제높이 - 10) {
    alert('다읽음')
  }
});&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Front-end/Vanilla JS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/277</guid>
      <comments>https://1924.tistory.com/277#entry277comment</comments>
      <pubDate>Thu, 14 Apr 2022 19:12:24 +0900</pubDate>
    </item>
    <item>
      <title>return과 소수점 다루기 (parseFloat, parseInt)</title>
      <link>https://1924.tistory.com/276</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수를 반환해준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 함수 종료의 뜻도 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;리턴을 만나면 함수가 종료되서 &lt;/b&gt;&lt;b&gt;리턴 아래 코드들은 생략된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649897830791&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function 함수(){
  return 123
  console.log(456);
}

console.log(함수());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;123을 출력해주고 함수가 종료되서 456은 출력되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UToQi/btrzliMoeJs/NunOMSIcWmfIn3Gi2Nwnw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UToQi/btrzliMoeJs/NunOMSIcWmfIn3Gi2Nwnw0/img.png&quot; data-alt=&quot;변환기 역할&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UToQi/btrzliMoeJs/NunOMSIcWmfIn3Gi2Nwnw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUToQi%2FbtrzliMoeJs%2FNunOMSIcWmfIn3Gi2Nwnw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;129&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;변환기 역할&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 숫자를 집어넣으면 규칙에 따라 다른 숫자가 나오는 변환기역할을 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변환기 만들 때 return 문법이 유용하게 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;예시 - 부가세 계산기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1649898260385&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(60000 * 0.1);
console.log(50000 * 0.1);
console.log(80000 * 0.1);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를&amp;nbsp;들어&amp;nbsp;6만원,&amp;nbsp;5만원,&amp;nbsp;8만원짜리&amp;nbsp;상품&amp;nbsp;3개의&amp;nbsp;부가세를&amp;nbsp;구해서&amp;nbsp;콘솔창에&amp;nbsp;출력하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게&amp;nbsp;필요할&amp;nbsp;때&amp;nbsp;마다&amp;nbsp;0.1을&amp;nbsp;곱해줘도&amp;nbsp;되겠지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는&amp;nbsp;숫자를&amp;nbsp;넣으면&amp;nbsp;다른&amp;nbsp;숫자가&amp;nbsp;나오는&amp;nbsp;변환기&amp;nbsp;역할이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649898368909&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function vat(a){
  return a * 0.1
}

console.log(vat(60000));
console.log(vat(50000));
console.log(vat(80000));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수로&amp;nbsp;구현하는게&amp;nbsp;좋다. &lt;br /&gt;이렇게&amp;nbsp;부가세&amp;nbsp;구하고&amp;nbsp;싶을&amp;nbsp;때&amp;nbsp;마다&amp;nbsp;vat()안에&amp;nbsp;숫자만&amp;nbsp;넣으면&amp;nbsp;편리해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;소수연산 시 주의사항&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1649898530442&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(1.1 + 0.3)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당&amp;nbsp;코드는&amp;nbsp;1.4가&amp;nbsp;출력&amp;nbsp;될&amp;nbsp;것&amp;nbsp;같지만 &lt;br /&gt;1.40000000001&amp;nbsp;이&amp;nbsp;출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1캡처.PNG&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y57QO/btrzjZG0PQJ/13Qd4To5rDtGV6k60EgcC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y57QO/btrzjZG0PQJ/13Qd4To5rDtGV6k60EgcC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y57QO/btrzjZG0PQJ/13Qd4To5rDtGV6k60EgcC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY57QO%2FbtrzjZG0PQJ%2F13Qd4To5rDtGV6k60EgcC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;142&quot; data-filename=&quot;1캡처.PNG&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 컴퓨터는&amp;nbsp;2진법으로&amp;nbsp;설계되어있다. &lt;br /&gt;그래서 숫자도 2진법 숫자만 알아들을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;컴퓨터에게 10 + 20 연산하라고 하면 &lt;br /&gt;전부 2진법으로 바꿔서 1010 + 10100 으로 연산하고 다시 10진법으로 바꿔서 보여준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무한한&amp;nbsp;숫자를&amp;nbsp;저장할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;저장장치는&amp;nbsp;없기&amp;nbsp;때문에 &lt;br /&gt;컴퓨터는&amp;nbsp;적절히&amp;nbsp;끊고&amp;nbsp;반올림해서&amp;nbsp;저장한다. &lt;br /&gt;&lt;br /&gt;예시)&amp;nbsp;1.00011001100110011001101 &lt;br /&gt;그래서&amp;nbsp;소수점&amp;nbsp;연산은&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;오차가&amp;nbsp;발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해결법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1. 덧셈하기 전 10곱하고 덧셈 후 10으로 나눈다.&lt;br /&gt;2. 외부라이브러리 사용&lt;br /&gt;3. 오차는 무시할 정도로 작으니 반올림한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;세세하게&amp;nbsp;정확한&amp;nbsp;계산이&amp;nbsp;필요한게&amp;nbsp;아니라면&amp;nbsp;대부분&amp;nbsp;그냥&amp;nbsp;반올림을&amp;nbsp;사용하면&amp;nbsp;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소수점&amp;nbsp;반올림하는&amp;nbsp;법&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1649898972783&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log( (1.1 + 0.3).toFixed(1) );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자.toFixed(몇자리)&amp;nbsp;이것을&amp;nbsp;사용하면&amp;nbsp;된다. &lt;br /&gt;모든&amp;nbsp;숫자&amp;nbsp;뒤에&amp;nbsp;붙일&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;주의점은 이렇게 하고 나면 '문자'로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;'123'과&amp;nbsp;123은&amp;nbsp;다른&amp;nbsp;타입이라&amp;nbsp;주의해서&amp;nbsp;써야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;'숫자'를 숫자로 변환하고 싶으면&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1649899057520&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;parseFloat('123')
parseInt('123')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당코드를 사용하면 123을 그 자리에 남겨줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;문자처럼생긴 숫자를 숫자로 변경해주는 유용한함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;parseInt()는&amp;nbsp;정수로,&amp;nbsp;parseFloat()는&amp;nbsp;실수로&amp;nbsp;변환해준다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;이&amp;nbsp;것을&amp;nbsp;사용하는&amp;nbsp;이유는 &lt;br /&gt;JS는&amp;nbsp;덧셈기호가&amp;nbsp;특이한&amp;nbsp;역할을&amp;nbsp;하는데 &lt;br /&gt;&lt;br /&gt;1&amp;nbsp;+&amp;nbsp;1&amp;nbsp;=&amp;nbsp;2&amp;nbsp;이지만 &lt;br /&gt;1&amp;nbsp;+&amp;nbsp;'1'&amp;nbsp;=&amp;nbsp;'11'&amp;nbsp;이다. &lt;br /&gt;&lt;br /&gt;+&amp;nbsp;기호&amp;nbsp;사용&amp;nbsp;시&amp;nbsp;둘중&amp;nbsp;하나만&amp;nbsp;문자가&amp;nbsp;있어도&amp;nbsp;문자덧셈을&amp;nbsp;해줘서&amp;nbsp;이고, &lt;br /&gt;문자덧셈은&amp;nbsp;두개의&amp;nbsp;문자를&amp;nbsp;이어붙여준다.&lt;/p&gt;</description>
      <category>Front-end/Vanilla JS</category>
      <author>1924</author>
      <guid isPermaLink="true">https://1924.tistory.com/276</guid>
      <comments>https://1924.tistory.com/276#entry276comment</comments>
      <pubDate>Thu, 14 Apr 2022 10:22:28 +0900</pubDate>
    </item>
  </channel>
</rss>