Library/JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ์Œ

๐ŸŽจ SweetAlert2 - ์ด์œ alert ๋ชจ๋‹ฌ์ฐฝ ์„ค์น˜ & ์‚ฌ์šฉ๋ฒ•

์ธํŒŒ_ 2021. 11. 12. 11:18

SweetAlert2-1

SweetAlert2

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ž์ฃผ Alert ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Alert๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ์ฃผ๊ณ ์ž ํ•  ๋•Œ ์ •๋ง ์ž๊ตฌ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ alert๋Š” ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ธŒ๋ผ์šฐ์ € UI๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

SweetAlert2-2

 

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฐ ์•Œ๋ฆผ์ฐฝ๋ณด๋‹ค ๋” ์˜ˆ์œ ์•Œ๋ฆผ ์ฐฝ์„ ์›ํ•˜์ฃ .

SweetAlert2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”๊ธฐ์กด์˜ alert ์ฐฝ๋ณด๋‹ค ๋‹ค์–‘ํ•œ ๋””์ž์ธ๊ณผ ์ƒ‰๊ฐ์œผ๋กœ ๋””์ž์ธ์ด ๋œ alert ์ฐฝ ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํ•œ ์ข…๋ฅ˜๋งŒ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ alert, confirm, prompt ์ž…๋ ฅ์ฐฝ ์—ญ์‹œ ์ง€์›ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์ฃผ์ œ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ด์œ ์•Œ๋žŒ์ฐฝ์„ ๋”ฐ๋กœ css์ž‘์—…์—†์ด ๊ณ ํ€„๋ฆฌํ‹ฐ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฐฝ์„ ๊ตฌ์„ฑํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” SweetAlert2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

SweetAlert2

A beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes

sweetalert2.github.io

SweetAlert2-cdnSweetAlert2-cdn


SweetAlert2 ์„ค์น˜

๋งํฌ์— ๋“ค์–ด๊ฐ€์„œ, ๋นจ๊ฐ„ ๋ฐ•์Šค ์ณ์ง„ ๋ถ€๋ถ„๋งŒ 2๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSSํŒŒ์ผ์„ ๊ฐ๊ฐ ๋‹ค์šด๋ฐ›์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

jsDelivr - A free, fast, and reliable CDN for Open Source

Supports npm, GitHub, WordPress, Deno, and more. Largest network and best performance among all CDNs. Serving more than 80 billion requests per month. Built for production use.

www.jsdelivr.com

SweetAlert2-cdn

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.4.10/dist/sweetalert2.min.css">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.4.10/dist/sweetalert2.min.js"></script>

SweetAlert2 ์‚ฌ์šฉ๋ฒ•

See the Pen SweetAlert2 by Horly Andelo (@horly-andelo) on CodePen.

See the Pen SweetAlert2 by barzz12 (@inpaSkyrim) on CodePen.


๊ธฐ๋ณธ Alert 

Swal.fire({
  'Alert๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.',         // Alert ์ œ๋ชฉ
  '์ด๊ณณ์€ ๋‚ด์šฉ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.',  // Alert ๋‚ด์šฉ
  'success',                         // Alert ํƒ€์ž…
});

SweetAlert2-

 

Confirm

Confirm์„ ๊ตฌํ˜„ํ• ๋•Œ ๊ฐ ๋ฒ„ํŠผ์˜ ์ƒ‰๊ณผ ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฒฐ๊ณผ๊ฐ€ ๋ญ๋ƒ์— ๋”ฐ๋ผ ํ›„์ฒ˜๋ฆฌ ์ด๋ฒคํŠธ(then)๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ๋™์ž‘์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Swal.fire({
   title: '์ •๋ง๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?',
   text: '๋‹ค์‹œ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ ์ค‘ํ•˜์„ธ์š”.',
   icon: 'warning',
   
   showCancelButton: true, // cancel๋ฒ„ํŠผ ๋ณด์ด๊ธฐ. ๊ธฐ๋ณธ์€ ์›๋ž˜ ์—†์Œ
   confirmButtonColor: '#3085d6', // confrim ๋ฒ„ํŠผ ์ƒ‰๊น” ์ง€์ •
   cancelButtonColor: '#d33', // cancel ๋ฒ„ํŠผ ์ƒ‰๊น” ์ง€์ •
   confirmButtonText: '์Šน์ธ', // confirm ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ง€์ •
   cancelButtonText: '์ทจ์†Œ', // cancel ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ง€์ •
   
   reverseButtons: true, // ๋ฒ„ํŠผ ์ˆœ์„œ ๊ฑฐ๊พธ๋กœ
   
}).then(result => {
   // ๋งŒ์•ฝ Promise๋ฆฌํ„ด์„ ๋ฐ›์œผ๋ฉด,
   if (result.isConfirmed) { // ๋งŒ์•ฝ ๋ชจ๋‹ฌ์ฐฝ์—์„œ confirm ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค๋ฉด
   
      Swal.fire('์Šน์ธ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', 'ํ™”๋ˆํ•˜์‹œ๋„ค์š”~!', 'success');
   }
});

SweetAlert2-SweetAlert2-

 

HANDLING BUTTONS 

์ดˆ๊ธฐ ๋ชจ๋‹ฌ์ฐฝ์—์„œ ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋А๋ƒ์— ๋”ฐ๋ผ key๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Swal.fire({
	// ...
}).then(result => {
    if (result.isConfirmed) { // ๋งŒ์•ฝ ๋ชจ๋‹ฌ์ฐฝ์—์„œ confirm ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค๋ฉด
    	// ...์‹คํ–‰
    } else if (result.isDismissed) { // ๋งŒ์•ฝ ๋ชจ๋‹ฌ์ฐฝ์—์„œ cancel ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค๋ฉด
    	// ...์‹คํ–‰
    }
});

SweetAlert2-

 

Prompt

Prompt๋Š” ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ์•Œ๋ฆผ์ฐฝ์ž…๋‹ˆ๋‹ค.

๋ณด์—ฌ๋“œ๋ฆฌ๋Š” ์˜ˆ์‹œ๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›๋Š” text ์˜ˆ์‹œ์ง€๋งŒ, ์ด๋ฐ–์— ์ฒดํฌ๋ฐ•์Šค, ๋ผ๋””์˜ค ๋ฒ„ํŠผ, ์…€๋ ‰ํŠธ ๋ฐ•์Šค, ํŒŒ์ผ ๋“ฑ <input> ํƒœ๊ทธ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์„ prompt๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

(async () => {
    const { value: getName } = await Swal.fire({
        title: '๋‹น์‹ ์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.',
        text: '๊ทธ๋ƒฅ ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.',
        input: 'text',
        inputPlaceholder: '์ด๋ฆ„์„ ์ž…๋ ฅ..'
    })

    // ์ดํ›„ ์ฒ˜๋ฆฌ๋˜๋Š” ๋‚ด์šฉ.
    if (getName) {
        Swal.fire(`: ${getName}`)
    }
})()

SweetAlert2-

 

Toast

const Toast = Swal.mixin({
    toast: true,
    position: 'center-center',
    showConfirmButton: false,
    timer: 3000,
    timerProgressBar: true,
    didOpen: (toast) => {
        toast.addEventListener('mouseenter', Swal.stopTimer)
        toast.addEventListener('mouseleave', Swal.resumeTimer)
    }
})

Toast.fire({
    icon: 'success',
    title: 'toast ์•Œ๋ฆผ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'
})

SweetAlert2-

 

Image

Swal.fire({
  title: 'Sweet!',
  text: 'Modal with a custom image.',
  imageUrl: 'https://unsplash.it/400/200',
  imageWidth: 400,
  imageHeight: 200,
  imageAlt: 'Custom image',
})

SweetAlert2-

 

Ajax

Swal.fire({
  title: 'Submit your Github username',
  input: 'text',
  inputAttributes: {
    autocapitalize: 'off'
  },
  showCancelButton: true,
  confirmButtonText: 'Look up',
  
  showLoaderOnConfirm: true, // ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„๋•Œ๊นŒ์ง€, ๋ฒ„ํŠผ์—๋‹ค๊ฐ€ ๋กœ๋”ฉ๋ฐ”๋ฅผ ํ‘œํ˜„
  preConfirm: (login) => { // ํ™•์ธ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜
    return fetch(`//api.github.com/users/${login}`)
      .then(response => {
        if (!response.ok) {
          throw new Error(response.statusText)
        }
        return response.json()
      })
      .catch(error => {
        Swal.showValidationMessage(
          `Request failed: ${error}`
        )
      })
  },
  
  // ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐฐ๊ฒฝ ๋ˆ„๋ฅผ๋•Œ ๋ชจ๋‹ฌ์ฐฝ ์•ˆ๋‹ซํžˆ๋„๋ก ์„ค์ •
  // isLoading() ์ฆ‰, ๋กœ๋”ฉ์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ false๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ•ด์„œ ousideClick์„ ์•ˆ๋˜๊ฒŒ ํ•˜๊ณ , ๋กœ๋”ฉ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฉด ousideClick์„ ํ—ˆ์šฉํ•œ๋‹ค.
  allowOutsideClick: () => !Swal.isLoading() 
  
}).then((result) => {

  if (result.isConfirmed) {
    Swal.fire({
      title: `${result.value.login}'s avatar`,
      imageUrl: result.value.avatar_url
    })
  }
})

SweetAlert2-

 

์•„์ด์ฝ˜ ํƒ€์ž…

Swal.fire({
  icon: 'success',  // ์—ฌ๊ธฐ๋‹ค๊ฐ€ ์•„์ด์ฝ˜ ์ข…๋ฅ˜๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.                     
  title: 'Alert๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.',    
  text: '์ด๊ณณ์€ ๋‚ด์šฉ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.', 
});

SweetAlert2-icon