Cute Running Puppy

๐ŸŸกJS, React 6

# gsap - SVG๋กœ ๋ฐฐ๊ฒฝ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„ฃ๊ธฐ

codepen.io ์‚ฌ์ดํŠธ์—๋Š” ์ •๋ง ๋Œ€๋‹จํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€๊ฒƒ๊ฐ™๋‹ค...! ๋ณด๋‹ค๊ฐ€ ๋‚˜๋„ ๋งŒ๋“ค์–ด๋ด์•ผ์ง• ํ•˜๊ณ  ์ƒ๊ฐ๋œ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐhttps://codepen.io/isladjan/pen/abdyPBw Parallax scroll animationThis was one of my earliest attempts at SVG parallax animation on CodePen, created for a GSAP competition. By using ScrollTrigger, I added layers of de...codepen.io์ด๊ฑฐ๋ž‘ ๋‹ค๋ฅธํ•˜๋‚˜๊ฐ€ ๋”์žˆ์—ˆ๋Š”๋ฐ ๋ญ”์ง€ ๋ชป์ฐพ๊ฒ ๋‹ค ใ… ใ… ์•„๋ฌดํŠผ ์š”๋Ÿฐ ๋А๋‚Œ์œผ๋กœ๋‹ค๊ฐ€svg์— ์ด๋ฒคํŠธ๋ฅผ ์ค˜์„œ ์Šค๋ฅด๋ฅต ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•ด๋ณด๋ ค๊ณ  ๋ฌด๋ฃŒ ์ด๋ฏธ์ง€๋ฅผ ์ฐพ์•„์„œ ๋ฐ›์•˜๋‹ค.. ๋ฌด๋ฃŒ ์ด๋ฏธ์ง€๋Š” ์—ญ์‹œ freepik์ด..

# jQuery - ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์š”์†Œ์— click ์ด๋ฒคํŠธ๊ฐ€ ์•ˆ ๋จนํž ๋•Œ ํ•ด๊ฒฐ๋ฒ•

jQuery๋กœ ํŒ์—… ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์— .click()์„ ๊ฑธ์—ˆ๋Š”๋ฐ, ์•„๋ฌด ๋ฐ˜์‘์ด ์—†๋‹ค?๋ถ„๋ช… $("#btnClose").click() ์ด๋ ‡๊ฒŒ ํ–ˆ๋Š”๋ฐ ์™œ ์•ˆ ๋˜์ง€? ๋ฒ„ํŠผ์— click() ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ–ˆ์ง€๋งŒ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ๋ฒ„ํŠผ์€ Ajax ์ดํ›„ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์š”์†Œ$("#btnClose").click(function () { $(".popup").removeClass("on");}); ์›์ธ ๋ถ„์„.click()์€ ๋ฌธ์„œ ๋กœ๋”ฉ ์‹œ์ ์— ์กด์žฌํ•˜๋Š” ์š”์†Œ์—๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์ด๋ฒคํŠธ ์œ„์ž„ ์‚ฌ์šฉ$(document).on("click", "#btnClose", function () {...})์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ๋ฅผ ์œ„์ž„ํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.$(document).on("click", "#btnClose", function ()..

๐ŸŸกJS, React 2025.06.09

# location.href ๊ธฐ์กด ์ฐฝ์—์„œ ์ด๋™๋˜๊ฒŒ ํ•˜๋Š”๋ฒ•

์ƒํ™ฉ๋ณ„ ์ •๋ฆฌ์ƒํ™ฉ์ž์‹์ฐฝ์—์„œ ๋ถ€๋ชจ์ฐฝ ์ œ์–ด๋ฐฉ๋ฒ•iframe ์•ˆ์—์„œwindow.parent.location.href = '/member/login';์ƒˆ ์ฐฝ (window.open)window.opener.location.href = '/member/login'; ์‚ฌ์šฉ ์˜ˆ์ œ : ์ƒˆ ์ฐฝ์—์„œ ๋ถ€๋ชจ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ณด๋‚ด๊ธฐif (window.opener) { // ์ƒˆ ์ฐฝ์„ ๋„์šด ๋ถ€๋ชจ์ฐฝ์ด ์กด์žฌํ•  ๋•Œ window.opener.location.href = '/member/login'; window.close(); // ํ•„์š”ํ•˜๋ฉด ์ž์‹์ฐฝ๋„ ๋‹ซ๊ธฐ} else { // ๋ถ€๋ชจ์ฐฝ์ด ์—†์œผ๋ฉด ์ž๊ธฐ ์ž์‹  ์ด๋™ window.location.href = '/member/login';} ์„œ๋ฒ„๋‹จ ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์‘๋‹ต ๋‚ด๋ณด๋‚ผ๋• ์ด..

๐ŸŸกJS, React 2025.05.28

# Next.js ๊ธฐ๋ณธ ์ƒ์„ฑ ๋ช…๋ น์–ด

npx create-next-app my-app ์˜ต์…˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋ฌป๋Š” ์งˆ๋ฌธ๋“ค:TypeScript ์“ธ๋ž˜?ESLint ์ ์šฉํ• ๋ž˜?Tailwind CSS ์“ธ๋ž˜?App Router (app ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜) ์“ธ๋ž˜?src/ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ• ๋ž˜?์ถ”๊ฐ€๋กœ ๋งŽ์ด ์„ค์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€mongoDBnpm install mongoose ํ™˜๊ฒฝ๋ณ€์ˆ˜ํŒŒ์ผ.env.local ์ž์ฃผ ์“ฐ๋Š” ์‹คํ–‰/๋นŒ๋“œ ๋ช…๋ น์–ด๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰npm run devํ”„๋กœ๋•์…˜ ๋นŒ๋“œnpm run build๋นŒ๋“œ ํ›„ ์‹คํ–‰npm startํƒ€์ž… ๊ฒ€์‚ฌ (TS ์‚ฌ์šฉ ์‹œ)npm run type-check์ฝ”๋“œ ๋ฆฐํŠธ ๊ฒ€์‚ฌnpm run lint ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์˜ˆ์‹œ (App Router ๊ธฐ์ค€)my-app/โ”œโ”€โ”€ app/โ”‚ โ”œโ”€โ”€ page.tsxโ”‚ โ””โ”€โ”€ api/โ”‚ โ””..

# iframe ๋ถ€๋ชจ์— focus ์˜ฎ๊ธฐ๊ธฐ (๋ชจ๋‹ฌ์ฐฝ ESC ์•ˆ๋‹ซํž˜)

if(code == 27){ $().removeClass();}๋ฅผ ์ ์šฉํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ iframe์—์„œ ๋ชจ๋‹ฌ์ฐฝ์„ ๋ถ€๋ชจ๋กœ ๋„์› ์„ ๋•Œ ESC๋ฅผ ๋ˆŒ๋Ÿฌ๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ ,ํ•œ๋ฒˆ ์•„๋ฌด๊ณณ์ด๋‚˜ ํด๋ฆญํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ iframe๊ณผ ๋ถ€๋ชจ๊ฐ„์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ๋˜์„œ gptํ•œํ…Œ ๋ฌผ์–ด๋ดค๋”๋‹ˆ์—ญ์‹œ๋‚˜ focus๊ฐ€ ์–ด๋””์— ๋˜์–ด์žˆ๋Š”์ง€์˜ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ž˜์„œ iframe์ด ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜ ๊ฐ€์žฅ ์•„๋žซ๋ถ€๋ถ„์—setTimeout(function () { window.focus(); document.activeElement?.blur();}, 50); ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ถ€๋ชจ์ฐฝ์œผ๋กœ focus๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค. ๐Ÿ˜

๐ŸŸกJS, React 2025.04.01

# fetch ๋น„๋™๊ธฐ ํ†ต์‹ 

fetchfetch API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œAJAX์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜์ง€๋งŒ, XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ AJAX ๋ฐฉ์‹๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ์‹ AJAX์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€๋งŒ, fetch๋Š” ์ตœ์‹  API๋กœ, Promise ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.# Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋ฐ˜ํ™˜๊ฐ’ ์œผ๋กœ ์ฒ˜๋ฆฌ fetch์™€ ๊ธฐ์กด AJAX ์ฐจ์ด์  1. AJAX (XMLHttpRequest ์‚ฌ์šฉ):๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„์˜ด.์ฝœ๋ฐฑ ๋ฐฉ์‹(๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง).// ์ฝœ๋ฐฑ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌfetchData(function(err, data1) { if (err) return console.error(err); processData(data1,..

๐ŸŸกJS, React 2025.03.21