Plug-ins

[웹코딩 가이드] 홈

여기서는 웹사이트 구축에 꼭 필요한 오픈소스 플러그인들 몇가지 간략히 소개합니다 diagram-arrow-down

Web 표준html로 웹사이트 틀을 만들고, Css로 꾸며주고, Javascript로 동작시키는데.. 이것들은 각각 분리하여 작성되어야 나중에라도, 누구라도,, 알아보기 쉽고 유지 관리에도 도움이 된다!


특정 플러그인을 사용하려면; 해당 플러그인에서 요구하는 방식대로 CDN으로 링크해주거나, 또는 소스 파일을 다운받아 가칭 ./plugins 폴더에 넣어주고 스크립트로 연결해주면; 이제 이 플러그인의 모든 기능을 html 문서에서 불러올 수 있다!


Fancy 내비게이션바

GSAP)의 은 전문가를 위해 설계된 매우 강력한 JavaScript 애니메이션 라이브러리이다

Fancy 내비게이션바
z-Animation은 이 강좌 사이트 전반에 걸쳐 적용되고 있는 애니메이션 플러그인으로서, 스크립트 소스는 </body> 앞과 사용자지정 GSAP 코드 앞에 넣어준다:
[ GSAP 스크립트 소스 ]
                                        
                                            <body>
                                                <div className="animateMe"></div>
                                                <h1>Hello GSAP!</h1>

                                                ..

                                                <!-- GSAP 스크립트 소스 -->
                                                <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

                                                <!-- 사용자정의 스크립트 코드 -->
                                                <script src="./myCustomCode.js"></script>
                                                <script>
                                                    // use a script tag or an external JS file
                                                    document.addEventListener("DOMContentLoaded", (event) => {
                                                        gsap.registerPlugin(Flip) // 다른 플러그인들도 각각 같은 플러그인 이름으로 넣어주면 됩니다!
                                                        // gsap code here!
                                                    });
                                                </script>
                                            </body>
                                        
                                    
1. 내비게이션바 작성 및 배치:
                                    
                                        
                                    
                                
2. 내비게이션바 색상은 Css 변수를 사용하여 사용자 지정해줄 수 있다:
                                    
                                        --bs-fancynav-togglerbar-bg: #ffffff;
                                        --bs-fancynav-collapse-bg: #ffffff;
                                        --bs-fancynav-link-color: #000000;
                                    
                                
3. 모바일/탭 장치에서 스크롤 시 배경 페이드인 효과를 준다:
                                    
                                        
                                    
                                


✓   그외에도 GSAP에는 다양한 플러그인이 포함되어 있는데, 필요하면; 예제 샘플들을 살펴보십시오..

                                    
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/gsap.min.js"></script>

                                        <!-- 각 플러그인 스크립트 소스 -->
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Flip.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/ScrollToPlugin.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/ScrollTrigger.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Draggable.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Observer.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/MotionPathPlugin.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/EaselPlugin.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/PixiPlugin.min.js"></script>
                                        <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/TextPlugin.min.js"></script>

                                        <script>
                                            // use a script tag or an external JS file
                                            document.addEventListener("DOMContentLoaded", (event) => {
                                                gsap.registerPlugin(Flip) // 다른 플러그인들도 각각 같은 플러그인 이름으로 넣어주면 됩니다!
                                                ..
                                                // gsap code here!
                                            });
                                        </script>
                                    
                                
사용자정의 z-Animation 설정
애니메이션의 트리거에는 data-zanim-trigger= 'scroll' 속성이 사용되는데, 이는 대상 DOM 요소가 뷰포트에 있는지 여부를 확인하여 요소가 돔에 있으면 애니메이션을 트리거한다:
                                    
                                        
                                    
                                
slide-downjs/custom/zanimation.js 파일의 변수에 미리 정의된 애니메이션을 사용할 수도 있는데, 미리 정의된 변수들에는 다음과 같은 것들이 있다: default, slide-down, slide-left/right, zoom-in/out, zoom-out-slide-right/left, blur-in
                                    
                                        
                                    
                                
다른 애니메이션 요소 내의 요소에 애니메이션을 적용하려면; 부모 요소에서 data-zanim-timelinedata-zanim-trigger= 'scroll'을 사용한다:
                                    
                                        
                                    
                                
GreenSock 설정과 함께 Css 속성을 사용하여 요소에 애니메이션을 적용할 수 있다:
                                    
                                        
                                    
                                
애니메이션을 반응형으로 만들기 위해 Bootstrap의 반응형 중단점을 써서 data-zanim-{size} 속성을 사용한다:
                                    
                                        
                                    
                                

Masonry 레이아웃

는 필터링과 정렬을 위한 그리드 기반 레이아웃 라이브러리로서, 사용 가능한 수직 공간의 최적 위치에 요소를 배치해주는데, 이는 포트폴리오 페이지 및 이미지 갤러리 등에서 놀랍도록 잘 작동된다!

메이슨리 레이아웃
부트스트랩에서 Masonry 필터를 사용하려면; 먼저, 아래 CDN 링크를 넣어주고, 그리드시스템 및 카드의 .row 래퍼에서 data-masonry= '{"percentPosition":true}' 속성을 더해주면 부트스트랩의 반응형 그리드시스템 및 카드 컴포넌트와 메이슨리의 포지셔닝이 결합된다
[ 부트스트랩과 메이슨리의 결합을 위한 CDN 링크 ]
                                        
                                            <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
                                            <script src="https://cdn.jsdelivr.net/npm/masonry-layout@4.2.2/dist/masonry.pkgd.min.js" integrity="sha384-GNFwBvfVxBkLMJpYMOABq3c+d3KnQxudP/mGPkzpZSTYykLBNsZEnG2D9G/X/+7D" crossorigin="anonymous" async></script>
                                        
                                    
Css의 은 한 축은 일반적인 엄격한 Grid 레이아웃(대부분 열)을 사용하고, 다른 축은 Masonry 레이아웃을 사용하는데, Masonry 축에서는 짧은 항목 뒤에 틈이 남는 엄격한 그리드를 고수하는 대신 다음 행의 항목이 위로 올라가 틈을 완전히 채우게 된다!
[ Masonry 그리드 레이아웃 ]
                                        
                                            .Masonry-grid { /* 일반적인 Masonry 레이아웃 */
                                                display: grid;
                                                grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); /* 그리드 축 */
                                                grid-template-rows: masonry; /* 메이슨리 축 */
                                                gap: 10px;
                                            }
                                        
                                    

일반적인 Masonry 레이아웃에서.. 이 컨테이너의 자식요소들은 일반 그리드 레이아웃 자동배치와 마찬가지로 행을 따라 항목별로 배치되지만, 새 행으로 이동하면; 항목이 Masonry 알고리즘에 따라 표시된다. 곧, 항목은 가장 많은 공간이 있는 열에 로드되어 엄격한 행 트랙 없이 빽빽하게 채워진 레이아웃을 만들게 되는 것이다!

메이슨리 필터링
메이슨리 레이아웃은 멀티 컬럼, 동적 그리드 레이아웃을 만들 수 있는 자바스크립트 플러그인인 를 사용하여 만들어졌는데, 이는 완벽히 갭 없는 레이아웃을 허용하는 첫 번째 스크립트이다!
웹 문서에서 Masonry Filter를 사용하기 위해서는, 먼저 Isotope 스크립트 코드를 불러와야 한다. 이어서 data-isotope= 속성을 추가하여 컴포넌트를 초기화하고, layoutMode=, itemSelector= 등의 속성으로 다양한 설정을 해줄 수 있다. 한편, data-filter= 속성으로 모든 요소들을 필터링할 수 있다
[ Masonry Filter 스크립트 소스 ]
                                        
                                            <script src="vendors/isotope-layout/isotope.pkgd.min.js"></script>
                                            <script src="vendors/isotope-packery/packery-mode.pkgd.min.js"></script>
                                        
                                    
                                                    
                                                        
                                                    
                                                

Isotope는 유사한 자식 아이템들을 지닌 컨테이너 요소에서 작동하며, 각 항목들의 크기 조정은 Css로 설정한다

                                                
                                                    
                                                
                                            
                                                
                                                    .grid-item { width: 25%; }
                                                    .grid-item--width2 { width: 50%; }
                                                
                                            

Isotope(); 생성자는 컨테이너 요소Options 두 인수를 받는다:

                                                
                                                    var elem = document.querySelector('.grid');
                                                    var iso = new Isotope(elem, { // 컨테이너 요소 elem
                                                        itemSelector: '.grid-item',
                                                        layoutMode: 'fitRows'
                                                    });
                                                
                                            

자바스크립트 없이 html만으로 Isotope를 초기화 할 수도 있다 - 컨테이너 요소에 data-isotope= 속성을 추가하고, 옵션은 해당 값에서 설정해줄 수 있다

                                                
                                                    <div class="grid" data-isotope='{"itemSelector": ".grid-item", "layoutMode": "fitRows" }'></div>
                                                
                                            

Rellax 스크롤링

플러그인은 배경 이미지, 비디오 및 인라인 요소에 대해 부드러운 시차 스크롤링 효과를 준다

패럴랙스 백그라운드
백그라운드 시차 스크롤링 효과는 부모(또는, 형제) 요소에서 Rellaxdata-parallax 속성과 함께 사용자정의 .bg-holder 클래스를 사용하는데, html 5 비디오나 유튜브 비디오 배경 또한 같은 방식으로 사용할 수 있다

패럴랙스 백그라운드 이미지

                                                    
                                                        
                                                    
                                                
                                                    
                                                        .bg-holder {
                                                            position: absolute; top: 0; left: 0; width: 100%; min-height: 100%;
                                                            background-size: cover; background-position: center; background-repeat: no-repeat;
                                                            overflow: hidden;
                                                            z-index: 0;
                                                        } .bg-holder .bg-video {
                                                            display: block;
                                                            position: absolute; top: 0; left: 0; height: 100%; min-width: 100%;
                                                            object-fit: cover;
                                                            z-index: -1;
                                                        } .bg-holder .bg-youtube {
                                                            position: absolute !important;
                                                            top: 0; left: 0; height: 100%; width: 100%;
                                                        }
                                                    
                                                

Parallax Video Background

부드러운 시차 스크롤링
패럴랙스 스크롤을 사용하기 위해서는 먼저 CDN 링크 및 초기화를 필요로 한다
[ Parallax 스크립트 CDN 링크 ]
                                        
                                            <!-- Parallax 스크립트 및 초기화 -->
                                            <script src="https://cdn.jsdelivr.net/gh/dixonandmoe/rellax@master/rellax.min.js"></script>
                                            <script>
                                                var rellaxInit= function rellaxInit() { // 패럴랙스 초기화
                                                    return window.Rellax && new window.Rellax('[data-parallax]', {})
                                                }
                                            </script>
                                        
                                    
스트립트 초기화는 스크립트 정의를 통한 방식과 html에서 data- 속성을 이용하는 방식이 있다
[ 스트립트 초기화 ]
                                        
                                            /* 1. 스크립트 정의를 통한 초기화 */
                                            jarallax(document.querySelectorAll('.jarallax'), {
                                                speed: 0.2,
                                            }
                                        
                                    
                                        
                                            
                                        
                                    
[ html 코드 작성 예: Background Image Parallax ]
                                        
                                            
                                        
                                    

data-rellax-speed(양수 및 음수 가능) 속성을 사용하여 .rellax 요소의 속도를 기본값(-2)이 아닌 다른 값으로 설정해줄 수 있다

                                                
                                                    
                                                
                                            
시차 요소를 중앙에 배치하는 센터링을 구현하는데는 전역 옵션이나 특정 요소에서 설정해줄 수 있다
                                                
                                                    
                                                
                                            
수평 패럴렉스는 기본적으로 비활성화되어 있지만, horizontal: true 값을 전달하여 활성화할 수 있다 이 기능은 파노라마 스타일의 웹사이트에서 사용하기 적당한데, 수직 스크롤링과 동시에 작동하므로 이를 원하지 않는다면; vertical: false 값도 함께 전달해주면 된다!
                                                
                                                    var rellax= new Rellax('.rellax', {
                                                        horizontal: true; vertical: false
                                                    });
                                                
                                            
기본적으로 패럴랙스 요소의 위치는 <body>의 스크롤 지점을 통해 결정되는데, 래퍼에 설정 블록의 속성을 전달하여 Rellax가 대신 해당 요소를 감시하도록 할 수 있다:
                                                
                                                    //Set wrapper to .custom-element instead of the body
                                                    var rellax= new Rellax('.rellax', {
                                                        wrapper: '.custom-element'
                                                    });
                                                
                                            

A-OS Animation

을 쓰면; 웹문서의 어느 곳에서든 스크롤 애니메이션을 적용할 수 있다!

A-OS 시작하기
A-OS Animation을 사용하기 위해서는; 먼저, Css 및 스크립트 CDN 링크와 초기화가 필요하다. 이어서, data-aos= "애니메이션"으로 원하는 애니메이션을 지정하고, 여타 옵션들을 추가해줄 수 있다
[ A-os CDN 링크, 스크립트 소스 및 초기화 ]
                                        
                                            <!-- Aos Css CDN 링크 -->
                                            <link href="https://unpkg.com/aos@next/dist/aos.css" rel="stylesheet" />

                                            <!-- Aos 스크립트 및 초기화 -->
                                            <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
                                            <script>
                                                AOS.init(); // Aos 초기화
                                            </script>
                                        
                                    
                                        
                                            /* A-OS 옵션들 */
                                            data-aos= "fade" // 애니메이션 종류
                                            data-aos-delay= "1000" // 시작 전 대기시간
                                            data-aos-duration= "1000" // 시작 이후 지속 시간 ← 단위: 0 ~ 3000 밀리초, 단계는 50씩
                                            data-aos-easing= "Easing" // 이징 종류
                                            data-aos-offset= "200" // 원래 트리거 지점으로부터의 거리 ← 단위: px
                                            data-aos-once= "false" // 스크롤 중 애니메이션을 한번만 발생시킬 것인지?
                                            data-aos-mirror= "true" // 스크롤 중 요소들이 애니메이션에서 사라져야 하는지?
                                        
                                    

                                    
                                        
                                    
                                

(* 아래로 아~주 천천히 스크롤해보세요..)


(* 아래로 아~주 천천히 스크롤해보세요..)


(* 아래로 아~주 천천히 스크롤해보세요..)


(* 아래로 아~주 천천히 스크롤해보세요..)


기본값: ease

                                    
                                        
                                    
                                

(* 아래로 아~주 천천히 스크롤해보세요..)


                                    
                                        
                                    
                                

(* 아래로 아~주 천천히 스크롤해보세요..)


* cf) 특정 요소를 대상으로 하여 설정할 수도 있다 - 곧, 실제 오프셋이 아니라 애니메이션을 트리거하는 데 사용되는 data-aos-anchor="앵커" 속성인데, 이는 한 요소에서 애니메이션을 트리거하고, 스크롤하면서 다른 요소로 이동할 수 있어 고정된 요소 애니메이션에 유용하다: <div data-aos="fade" data-aos-anchor=".other-element"></div>


A-OS는 매우 멋진 움직임들을 보여주지만, 그 사용법은 지극히 단순합니다 - 그저 아무 요소에서건 data-aos= "애니메이션명"data-aos-옵션명= "값" 코드를 넣어주기만 하면 됩니다 ^^

                                    
                                        
                                    
                                

Big Picture

는 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오로 선택적으로 자동 재생해준다

빅픽쳐 갤러리
빅 픽쳐 플러그인을 사용하기 위해서는; 먼저 Big Picture 플러그인을 위한 스크립트 소스 및 초기화를 필요로 한다
[ BicPicture 스크립트 소스 ]
                                        
                                            <script src="vendors/bigpicture/BigPicture.js"></script>

                                            또는, <script src="https://cdn.jsdelivr.net/npm/bigpicture@2.6.4/dist/BigPicture.min.js"></script>
                                        
                                    
1. Big Picture 플러그인은 썸네일을 표시할 수 있으며 클릭하면 원본 이미지가 팝업되는데, 라이트 박스 이미지는 무엇이든 래핑하여 작동된다 <img> 요소는 data-bigpicture= 속성을 지닌 <a> 요소 내부에 배치하여야 한다!
                                    
                                        
                                    
                                

버튼이 필요하지 않다면; 위 코드와 같은 그리드 배치도 필요없고, 그저 <a><img src="" /></a> 요소만으로 충분합니다!

2. data-bigpicture=data-bp= 속성을 쓰면 쉽게 라이트박스 이미지 갤러리를 만들 수 있다. 부모요소에서 갤러리 id 를 설정하고, <a> 요소에서 data-bigpicture= 속성을 써서 id 를, data-bp= 속성을 사용하여 이미지 원본을 전달해주면 된다
                                    
                                        
                                    
                                
3. YouTube 및 Vimeo 동영상은 data-bigpicture= 속성을 통해 동영상 id 를 제공하기만 하면 Big Picture 플러그인과 함께 사용할 수 있다
                                    
                                        
                                    
                                

참고로, 최근들어 유튜브에서는 영상의 ID를 넣든, URL을 넣든 작동하지 않습니다 - 현재로서는 <a> 요소로 직접 링크하는 것만이 유일한 방법입니다. 아마도, 광고도 안보면서 꽁짜로 가져다 본다고 임베드 방식은 정책적으로 막아놓은 것으로 보입니다 ㅡㅡ; 양반네

Glightbox

는 이미지, iframe, 인라인 컨텐츠 및 비디오를 표시해주며, YouTube, Vimeo 및 자체 호스팅 비디오에 대해 선택적 자동 재생을 지원한다

Glightbox 사용하기
Glightbox를 사용하기 위해서는; 먼저 Css 및 스크립트 소스를 필요로 한다
[ Glightbox 소스 및 스크립트 ]
                                        
                                            <!-- Css 링크 -->
                                            <link href="https://cdn.jsdelivr.net/npm/glightbox/dist/css/glightbox.min.css" rel="stylesheet" />

                                            <!-- 스크립트 불러오기 -->
                                            <script src="https://cdn.jsdelivr.net/gh/mcstudios/glightbox/dist/js/glightbox.min.js"></script>
                                            <script type="text/javascript"> // 필요하다면; 여기서
                                                const lightbox= GLightbox({ }); // 옵션 설정하기
                                            </script>
                                        
                                    
[ Glightbox 사용하기 ]
                                        
                                            
                                        
                                    

참고로, GLightbox에는 plyr 플레이어가 내장되어 있으며, Plyr의 모든 옵션을 플레이어에 전달할 수 있습니다!


Github 예제 를 한번 살펴보시고, 소스 코드와 매뉴얼을 잘 숙지하여 사용해보십시오..

Swiper 캐러셀

은 하드웨어 가속 전환과 놀라운 기본 동작을 갖춘 가장 현대적인 모바일 터치 슬라이더로서, 모바일 웹 사이트, 모바일 웹 앱 등에서 유용하게 쓸 수 있는데, 일반 PC 환경에서도 또한 잘 작동된다!

스위퍼 캐러셀
스위퍼 캐러셀 플러그인을 사용하기 위해서는; 먼저, 다음과 같이 Swiper 관련 CDN 링크, Script 소스 및 초기화를 필요로 한다
[ Swiper 캐러셀 소스 및 스크립트 ]
                                        
                                            <!-- Swiper Css CDN 링크 -->
                                            <link href="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.css" rel="stylesheet" />

                                            <!-- Swiper 스크립트 소스 불러오기 -->
                                            <script src="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.js"></script>
                                            <script>
                                                /* 스위퍼 캐러셀 초기화 옵션들 */
                                                const swiper= new Swiper('.swiper', {
                                                    direction: 'vertical',
                                                    loop: true,

                                                    // 이전, 이후 화살표 버튼이 필요하다면;
                                                    navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', },

                                                    // 페이지네이션이 필요하다면;
                                                    pagination: { el: '.swiper-pagination', },

                                                    // 스크롤바가 필요하다면;
                                                    scrollbar: { el: '.swiper-scrollbar', },
                                                });
                                            </script>
                                        
                                    

필요하다면; 스위퍼 컨테이너의 크기도 조정해줄 필요가 있다: .swiper { width: 600px; height: 300px; }

                                    
                                        
                                    
                                
                                                    
                                                        
                                                    
                                                

썸네일은 기본적으로 .swiper-container 요소 뒤에 배치되는데, thumb 옵션에 thumbOptions: '#parentID' 값을 제공하여 특정 부모요소에 썸네일을 배치할 수도 있다!

Plyr 플레이어

는 html 5) 비디오, 등을 재생해주는 인라인 미디어 플레이어이다

Plyr 플레이어 사용하기
Plyr 플레이어를 사용하기 위해서는; 먼저 Css 및 스크립트 소스를 필요로 한다
[ Plyr Player 소스 및 스크립트 ]
                                        
                                            <head>
                                                ..

                                                <!-- Css 링크 -->
                                                <link href="https://cdn.plyr.io/3.8.4/plyr.css" rel="stylesheet" />            
                                            </head>

                                            <body>
                                                ..

                                                <video class="media js-player" playsinline controls data-poster="./_videos/포스터.png" data-plyr-config='{"title": "Example Title"}'>
                                                    <source src="./_videos/shoes.mp4" type="video/mp4" />
                                                    <track src="./_videos/자막.vtt" kind="subtitles" srclang="ko" label="한글 자막" />
                                                </video>

                                                ..

                                                <!-- 스크립트 불러오기 -->
                                                <script src="https://cdn.plyr.io/3.8.4/plyr.js"></script>

                                                <!-- 스크립트 생성 -->
                                                <script>
                                                    const player= new Plyr('.js-player')
                                                </script>
                                            </body>
                                        
                                    

옵션도 함께 설정해줄 수 있다: const player= new Plyr('.js-player', { title: 'Example', });

html 5) Player
1. 유튜브와 비메오 플레이어의 경우, Plyr은 기본적으로 <iframe>을 사용하는데, plyr__video-embed 클래스 이름이 반응형 임베드로 만든다. autoplay, loop, playsinline (유튜브 전용) 등의 쿼리 매개변수를 URL에 추가할 수 있다
                                    
                                        
                                        <div class="plyr__video-embed" id="player">
                                            <iframe src="https://www.youtube.com/embed/bTqVqk7FSmY?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1" allowfullscreen allowtransparency allow="autoplay"></iframe>
                                        </div>
                                    
                                

plyr__video-embed 클래스는 (가장 일반적인)16:9 비율로 시작하는데, Plyr 자체가 작동하면 사용자가 지정한 비율 설정 옵션이 작동된다!

2. 또는 data-plyr-providerdata-plyr-embed-id 라는 두 가지 필수 데이터 속성을 가진 표준 div를 선택할 수도 있다

                                    
                                        
                                    
                                

data-plyr-embed-id는 미디어 영상의 ID 혹은 URL일 수 있으며, WebVTT 자막 또한 지원한다


* cf) 한 페이지에 여러 영상을 임베드할 경우에는 각각 따로 생성해주어야 하는데, 아래와 같이 맵 배열을 이용하면 모두 순차적으로 생성된다

                                    
                                        const players= Array.from(document.querySelectorAll('.js-player')).map((p) => new Plyr(p));
                                    
                                

이 경우에는 당연히, 영상에서 ID 대신 클래스를 사용해야 한다!


참고로, 최근들어 유튜브에서는 영상의 ID를 넣든, URL을 넣든 작동하지 않습니다 - 현재로서는 <a> 요소로 직접 링크하는 것만이 유일한 방법입니다. 아마도, 광고도 안보면서 꽁짜로 가져다 본다고 임베드 방식은 정책적으로 막아놓은 것으로 보입니다 ㅡㅡ; 양반네

                                    
                                        
                                    
                                
VideoJS 플레이어 사용하기
플레이어는 plyr 플레이어의 (아직은.. 진행형인)리빌딩 버전이다
[ VideoJS 소스 및 스크립트 ]
                                        
                                            <!-- Css 링크 -->
                                            <link href="https://vjs.zencdn.net/8.23.8/video-js.css" rel="stylesheet" />

                                            <!-- 스크립트 불러오기 -->
                                            <script src="https://vjs.zencdn.net/8.23.8/video.min.js"></script>
                                        
                                    
html 5) Player
                                    
                                        
                                    
                                

data-setup="{}"은 기본 설정값으로 시작하지만, 여기에 모든 옵션들을 추가해줄 수 있다 2026.4.5일 현재, 계속 버전업이 진행중인 상태이니.. 그외의 상세 사용법은 공식 문서를 참조하십시오

Smooth Scroll

플러그인은 문서 내부에서 점프하는 앵커에 부드러운 애니메이션 효과를 준다

부드러운 스크롤
스무드 스크롤 플러그인을 사용하기 위해서는; 먼저, CDN 링크 및 초기화 스크립트를 넣어주어야 한다. 사용법은 아주 간단한데, 그저 일반 앵커 링크에 data-scroll 속성을 추가해주는 것만으로 충분하다: 부드러운 스크롤 예
[ Smooth Scroll CDN 링크 및 초기화 ]
                                        
                                            <body>
                                                <p id="smooth-header">
                                                    <a href="#smooth-footer" data-scroll>아래로 내려가려면 클릭하세요..</a>
                                                </p>

                                                .. 중략

                                                <p id="smooth-footer">
                                                    <a href="#smooth-header" data-scroll>위로 올라가려면 클릭하세요..</a>
                                                </p>

                                                <!-- Smooth Scroll CDN 링크 -->
                                                <script src="https://cdn.jsdelivr.net/gh/cferdinandi/smooth-scroll@15/dist/smooth-scroll.polyfills.min.js"></script>
                                                <script> // Smooth Scroll 초기화
                                                    var scroll= new SmoothScroll('a[href*="#"]', { // 모든 앵커 링크에 스무드스크롤을 적용한다
                                                        /* 추가 옵션 설정 */
                                                        speed: 300ms, // 스크롤 속도(= 1000px 이동에 걸리는 시간) ← 기본값: 300ms
                                                        easing: 'linear' // Eeasing 애니메이션 종류 ← 기본값: linear
                                                    });
                                                </script>
                                            </body>
                                        
                                    

CDN 링크 및 초기화 스크립트는 </body> 코드 직전에 넣어주십시오 앞으로 만나게 될 여타 플러그인들도 또한 마찬가지입니다

Anchor-JS

플러그인은 기존 페이지 컨텐츠에 깊은 앵커 링크를 추가한다!

깊은 앵커링크
Anchor-JS 플러그인을 사용하기 위해서는; 먼저, CDN 링크 및 초기화 작업이 필요한데, Anchor-JS 플러그인은 딥 링크하려는 요소를 타겟팅하기 위해 Css 선택자를 사용하는 복수의 메서드 또한 제공한다:
[ AnchorJS CDN 링크 및 초기화 ]
                                        
                                            <script src="https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js"></script>

                                            <script>
                                                /* 1. 달리 타겟팅을 설정하지 않는 기본 초기화 설정 */
                                                anchors.add(); // 'h2, h3, h4, h5, h6'의 기본 선택자로 대체된다

                                                /* 2. 혹은, 딥 링크하려는 요소를 타겟팅하기 위해 아래와 같은 방식으로 사용할 수도 있다 */
                                                anchors.add('h1'); // 페이지의 모든 h1 요소에 앵커 추가
                                                anchors.add('.anchored'); // .anchored 클래스가 할당된 요소에 앵커 추가
                                            </script>
                                        
                                    

기본 앵커 문자(§)는 언제든 아래와 같은 옵션을 추가하여 다른 유니코드 문자로 변경해줄 수 있다:

[ Anchor-JS 옵션 변경 ]
                                        
                                            
                                        
                                    
                                        
                                            var anchors= new AnchorJS() // 앵커의 인스턴스 생성
                                            anchors.options= {
                                                icon: '⇅', // AnchorJS 기본 앵커 문자 변경
                                            }
                                            anchors.add('[data-anchor]') // data-anchor 속성이 주어진 요소에 앵커를 추가한다
                                        
                                    
딥 앵커 옵션 설정
1. Deep Anchor는 각각의 옵션을 통해 앵커 표시 위치를 변경해주거나, 언제 앵커를 보일 것인지 등을 설정해줄 수 있다. 또는, anchors.options= { .. }로 한번에 설정해줄 수도 있다:
[ Anchor-JS 옵션 설정 ]
                                        
                                            anchors.options.placement= 'left' // 앵커를 앞쪽에 배치한다 ← 기본값: right
                                            anchors.options.visible= 'always' // 앵커를 항상 보인다 ← 기본값: hover 시
                                        
                                    
                                        
                                            var anchors= new AnchorJS()
                                            anchors.options= { /* 모든 옵션들을 한번에 지정한다 */
                                                icon: '⇅',
                                                titleText: '위로 이동..', /* 옵션을 추가할 때는 ,로 구분해주어야 한다! */
                                            };
                                            anchors.add('article > dl') // article 바로 아래 모든 dl 요소

                                            anchors.options= { // 앵커 추가
                                                visible: 'always', icon: '#'
                                            };
                                            anchors.add('article > dl > dt') // article 바로 아래 모든 dl의 바로 밑 단계 dt 요소
                                        
                                    

위 코드는 이 웹문서에 적용한 딥 앵커 설정입니다. 확인해보세요..

2. 고정 내비게이션바가 있는 페이지에서는 연결하려는 제목을 가릴 수 있는데, 이를 방지하기 위해 Css의 :: 선택자를 써서 약간의 사용자 지정 스타일을 지정하여 대상 제목에 여백을 추가해줄 수 있다:
                                    
                                        /* 1. 의사 요소를 만들어 고정 내비게이션 바의 높이로 만들어줌으로써 링크 위의 위치로 점프하도록해준다 */
                                        :target::before {
                                            content: "";
                                            display: block; height: 80px; width: 1px;
                                            margin-top: -80px;
                                        }

                                        /* 2. 또는, 아래처럼 새로운 scroll-margin-top 속성을 사용할 수도 있다
                                        - 단, 브라우저에 따라서는, 이 방식을 지원하지 않을 수도 있다! */
                                        :target { scroll-margin-top: 80px; }
                                    
                                
3. 블로그의 최근 게시물 페이지, 또는 지정된 태그가 있는 모든 게시물의 페이지와 같이 컨텐츠가 변경된 페이지가 있는 것이 일반적이고.. 그러한 페이지에 앵커를 추가하면 컨텐츠가 해당 페이지를 떠날 때 링크가 끊어질수 있으므로 문제가 될 수 있다. 이를 방지하려면; 해당 앵커가 항상 게시물의 영구 링크 URL을 가리키도록 하는 base 옵션을 사용할 수 있다:
                                    
                                        // Note: you can often get the permalink url from your site's backend
                                        anchors.options.base= "/2019/1/03/my-post";
                                        anchors.add();

                                        // Anchor url before: "#conclusion"
                                        // Anchor url after: "/2019/1/03/my-post#conclusion"
                                    
                                
4. AnchorJS에는 (점프 탐색 등)탐색을 동적으로 생성하는 메서드가 포함되어 있지 않다. 그럼에도, AnchorJS는 모든 앵커 요소목록(anchors.elements)을 노출하며, 이러한 방식으로 외부 코드는 요소를 조회하고 이를 사용하여 탐색을 생성할 수 있게 된다. 또한, 미리 정의된 ID를 가진 정적 내비게이션과 함께 AnchorJS를 사용할 수도 있다. 어떤 경우에는, heading 요소 대신 기존의 섹션 ID에 연결할 수도 있는데, AnchorJS에 data-anchor-id= 속성을 사용하여 이 작업을 수행하도록 지시할 수 있다:
                                    
                                        
                                    
                                
                                    
                                        <script>
                                            anchors.add('h3');
                                        </script>
                                    
                                
5. 한 페이지에 각각 고유한 디자인이 있는 여러 앵커 세트를 가질 수도 있는데, 단지 AnchorJS 객체의 고유한 인스턴스를 만들기만 하면 된다. 또는, 원하는 옵션으로 인스턴스를 사전 설정할 수도 있다:
                                    
                                        var sidebarAnchors= new AnchorJS();
                                        anchors.add('.main h2'); // The default instance.
                                        sidebarAnchors.add('.sidebar h2'); // The new instance.
                                    
                                
                                    
                                        var sidebarAnchors= new AnchorJS({
                                            placement: 'left', icon: '¶'
                                        });
                                        sidebarAnchors.add('.sidebar h2');
                                    
                                

Loaders.css

플러그인은 웹페이지 로딩 시, 움직이는 짧고 작은 애니메이션을 보여주는 순수 Css 로딩 애니메이션이다

프리로더 애니메이션
먼저, loaders.css 소스 링크를 필요로 하며, 이어서 <body> 바로 다음에 컨테이너 요소를 만들어 애니메이션 종류를 지정해준다. 다음, 컨테이너 요소 안에 필요한만큼 적절한 수의 빈 <div> 블록을 만들어주면 된다 그 개수에 따라 모양 및 움직임이 미세하게 달라진다! Css 로딩 애니메이션
[ loaders.css 사용하기 ]
                                        
                                            
                                        
                                    

<body> 태그 바로 뒤에 프리로더 컴포넌트를 추가하여 프리로더를 활성화하는데, 애니메이션이나 카운트다운 등 다른 모든 구성요소는 프리로더가 멈춘 이후 작동을 시작하게 된다!

[ 사용자정의 옵션 설정하기 ]
                                        
                                            /* 로더 크기 변경하기: 트랜스폼 Scale 추가 */
                                            .loader-inner {
                                                transform: scale(0.5, 0.5);
                                            }

                                            /* 텍스트색 및 배경색 변경하기: 자식 div 요소에 스타일 추가 */
                                            .ball-pulse > div {
                                                color: #fff; background: #516643;
                                            }
                                        
                                    

타이핑 텍스트

플러그인은

타이핑 텍스트
Typed.js 플러그인을 사용하려면; 먼저, CDN 링크가 필요하고, 타이핑칠 내용은 <span data-typed-text= "['내용 1', '내용 2', ..]"></span> 식으로 넣어주면 된다
                                    
                                        <!-- Typed.js 스크립트 CDN 링크 -->
                                        <script src="https://unpkg.com/typed.js@3.0.0/dist/typed.umd.js"></script>
                                    
                                
                                    
                                        
                                    
                                
1. 웹페이지 안에 직접 내용을 배치하는 방식과는 달리, 곧바로 스크립트에서 문자열 형태로 넣어줄 수도 있다

남산은 서라벌의 진산(鎭山)이다: 북의 금오봉(金鰲峰, 468m)과 남의 고위봉(高位峰, 494m)을 중심으로 동서 너비 4km, 남북 길이 10km의 타원형으로, 한 마리의 거북이 서라벌 깊숙이 들어와 엎드린 형상이다. 골은 깊고 능선은 변화무쌍하여 기암괴석이 만물상을 이루었으니 작으면서도 큰 산이다..

                                    
                                        
                                    
                                
                                    
                                        <script>
                                            var typed= new Typed('#namsan_typing', {
                                                stringsElement: '#typed-strings', typeSpeed: 150,
                                            });
                                        </script>
                                    
                                
2. 문자열의 배열 형태로 넣어줄 수도 있다

                                    
                                        <span id="array_element"></span>
                                    
                                
                                    
                                        var typed2= new Typed('#array_element', {
                                            strings: ['첫번째 문장입니다.. ^10000', '두번째 문장입니다..', '세번째 문장입니다..'], typeSpeed: 150,
                                        });
                                    
                                

위 코드에서 '첫번째 문장 ^10000'10000ms(= 10초)간 일시 중지한 뒤 다음으로 지나가도록 설정해준 것이다!

3. data-typed로 컴포넌트를 초기화하고, data-options=".."로 문자열을 정의하여 기본 설정값을 사용하거나 재정의할 수도 있다
                                    
                                        
                                    
                                

기본 설정된 초기값은 다음과 같다: "startDelay":1000, "typeSpeed":100, "backSpeed":50, "backDelay":1000, "loop":true


* cf) Css 애니메이션은 Javascript에서 초기화할 때 빌드된다. 그러나 다음과 같이 사용자 정의해줄 수도 있다

                                    
                                        /* Cursor */
                                        .typed-cursor { .. }

                                        /* If fade out option is set */
                                        .typed-fade-out { .. }
                                    
                                

Up/Down 카운터

순수 Javascript 라이브러인 는 카운트업 애니메이션을 신속히 만들 수 있도록 해준다

카운트 Up
Count Up 플러그인을 사용하기 위해서는 먼저, 스크립트 소스를 필요로 하며, data-countup= 속성을 가진 요소가 뷰포트에 보여진 이후 카운팅을 시작한다
[ CountUp.js 스크립트 소스 ]
                                        
                                            <script src="vendors/countup/countUp.umd.js"></script>                                    
                                        
                                    

0

                                    
                                        
                                    
                                
                                    
                                        var countupInit = function countupInit() {
                                            if (window.countUp) {
                                                var countups = document.querySelectorAll('[data-countup]');
                                                countups.forEach(function (node) {
                                                    var _utils$getData = utils.getData(node, 'countup'),
                                                        endValue = _utils$getData.endValue,
                                                        options = _objectWithoutProperties(_utils$getData, _excluded);
                                            
                                                    var playCountUpTriggerd = false;
                                            
                                                    var countUP = function countUP() {
                                                        if (utils.isElementIntoView(node) && !playCountUpTriggerd) {
                                                            var countUp = new window.countUp.CountUp(node, endValue, _objectSpread({
                                                                duration: 3,
                                                                useEasing: false
                                                            }, options));
                                                
                                                            if (!countUp.error) {
                                                                countUp.start();
                                                            } else {
                                                                console.error(countUp.error);
                                                            }
                                                
                                                            playCountUpTriggerd = true;
                                                        }
                                                    };
                                            
                                                    countUP();
                                                        window.addEventListener('scroll', function () {
                                                        return countUP();
                                                    });
                                                });
                                            }
                                        };                                                          
                                    
                                
카운트 Down
아래 사용자정의 Count Down 스크립트는 data-countdown= 속성을 가진 요소가 뷰포트에 보여진 이후, 현재로부터 남은 시간을 카운팅한다

                                    
                                        
                                    
                                
                                    
                                        
                                    
                                

프로그레스 바

플러그인을 사용하면 반응형의 스타일리시한 웹용 진행률 표시기를 쉽게 만들 수 있는데, 애니메이션은 모바일 장치에서도 잘 작동된다!

프로그레스 바
Progress Bar에서는 Line, CircleSemiCircle 등 몇 가지 모양을 기본 제공하는데, 먼저, 스크립트 소스를 불러들여야 한다
[ Progress Bar 스크립트 소스 ]
                                        
                                            <script src="vendors/progressbar/progressbar.js"></script>

                                            <script>
                                                var ProgressBar= require('progressbar.js');

                                                // html에 빈 <div id="container"></div>가 있다고 가정할 때
                                                var bar= new ProgressBar.Line('#container', {easing: 'easeInOut'})
                                                bar.animate(1)  // Value from 0.0 to 1.0
                                            </script>
                                        
                                    
                                    
                                        
                                    
                                

그외에도, 강력한 대화형 차트 작성 및 시각화 라이브러리인 , 의존성 없는 순수 자바스크립트 별표 평가 위젯인 등도 있습니다. 필요해지면; 찾아가보세요..

수식 입력기

은 수학 표기를 기술하고 그 구조와 내용을 담고 있는 XML 마크업 언어인데, 이를 써서 직접 수식을 작성하는 것은 만만치 않으므로, html 문서에 수학 관련 수식들을 넣으려면; 등의 수식 입력기 라이브러리를 쓰는 것이 쉽다!

수식 입력하기
1. 먼저 관련 Css 및 스크립트를 CDN으로 링크하고 스크립트를 초기화해주어야 한다
[ Equation Editor CDN 링크 및 초기화 ]
                                        
                                            <!-- Css 및 스크립트 CDN 링크 -->
                                            <link rel="stylesheet" href="https://editor.codecogs.com/eqneditor.css" />

                                            <script src="https://editor.codecogs.com/eqneditor.api.min.js" crossorigin="anonymous"></script>
                                            <script type="text/javascript"> /* 스크립트 초기화 */
                                                textarea= new EqEditor.TextArea('latexInput')
                                                .addToolbar(new EqEditor.Toolbar('toolbar'), true)
                                                .addOutput(new EqEditor.Output('output'))
                                                .addHistoryMenu(new EqEditor.History('history'));
                                            </script>

                                            <!-- 작성된 기호를 html에 삽입하기 위한 latex 플러그인 -->
                                            <script src="http://latex.codecogs.com/latexit.js"></script>
                                        
                                    
2. 다음, <body>에서 에디터용 컨테이너를 만들어주어야 한다
                                    
                                        
                                    
                                

이렇게 만들어진 수식기호 입력기인 Equation 컨테이너에서 수식기호를 작성한 뒤, 웹문서에 붙여넣으면 됩니다..


✓   위 컨테이너에서 작성된 수식 기호는 웹문서에 직접 이미지로 복사해 넣어도 되지만, html에 삽입하기 위한 latex 플러그인을 사용하는 것이 보다 유익하다!

                                    
                                        <!-- 작성된 기호를 html에 삽입하기 위한 latex 플러그인 -->
                                        <script src="http://latex.codecogs.com/latexit.js"></script>
                                    
                                

아래는, 위 설명대로 따라하다보니 얼떨결에 만들어진 수식 입력기입니다

Equation Editor

✓   먼저, 위 메뉴에서 버튼을 누르면; 아래 창에 ^{} 모양이 만들어집니다. 다음, 맨 앞에 2 를 적고 중괄호 {} 안에 3을 넣어주면(2^{3}); 그 아래 창에 수식 모양(2^{3})이 나타납니다. 이제, 수식을 삽입할 html 문서에서.. 윗 창에 넣어준 코드를 아래와 같이 <span> 등의 html 요소 안에 복사해주면 됩니다: <span lang="latex">2^{3}</span> 참고로, 숫자문자, +, -, / 연산자는 그 자체로 넣어주면 됩니다!

Quill Editor

는 최신 웹용으로 제작된 무료 오픈 소스 WYSIWYG 텍스트 편집기로서, 모듈식 아키텍처와 표현력 있는 API를 통해 모든 요구 사항에 맞게 완벽하게 사용자 지정할 수 있다!

위지위그 에디터 Quill
퀼 에디터를 사용하려면; 먼저 Quill Css 및 스크립트를 CDN으로 링크하고 스크립트를 초기화한다. 다음, 에디터용 컨테이너만 만들어주면 된다
[ Quill Editor CDN 링크 및 스크립트 초기화 ]
                                        
                                            <link href="https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.snow.css" rel="stylesheet" />

                                            <script src="https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js"></script>
                                            <script>
                                                const quille= new Quill('#editor', {
                                                    theme: 'snow' // 'snow' 테마로 초기화 ← 부동 도구모음 테마인 'bubble'도 있음
                                                });
                                            </script>
                                        
                                    
                                    
                                        <div id="editor">
                                            마음껏 적어보세요..
                                        </div>
                                    
                                

끝입니다, 간단하지요?

마음껏 적어보세요..

실제로는, Quill 에디터는 이보다 훨씬 더 풍부하고 방대하니.. 관련 상세 내용들은 Quill-js 공식사이트로 가서 살펴보십시오..

List-JS 테이블

는 작고 보이지 않으며 단순하지만 일반 HTML 목록, 표 또는 기타 항목에 검색, 정렬, 필터 및 유연성을 추가하는 강력하고 빠른 순수 자바스크립트 라이브러리이다

List.js 테이블
List.js를 사용하기 위해서는; 먼저, 스크립트 소스를 불러온 뒤, 매우 간단한 템플릿으로 리스트 목록을 만들어줄 수 있다
[ List.js CDN 링크 ]
                                        
                                            <script src="//cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>

                                            <script>
                                                .. 테이블 작성 코드
                                            </script>
                                        
                                    
                                    
                                        
                                    
                                
                                    
                                        
                                    
                                
                                        
                                            
                                        
                                    
                                        
                                            
                                        
                                    
    • Kim

      경주


    여기서는 간단한 기본 예만 들었지만.. 그밖에 검색, 정렬, 필터 등의 다양한 고급 사용법들은 공식 사이트로 가서 살펴보십시오..

    DropZone 업로더

    는 웹사이트에서 드롭된 파일을 쉽게 처리할 수 있도록 해주는 라이브러리이다

    드롭죤 업로더
    드롭죤 업로더 플러그인을 사용하려면; 먼저 Dropzone Css 및 스크립트를 CDN으로 링크한 뒤 스크립트를 초기화하고, 이어서 사용할 form 요소를 만들어주면; Dropzone은 .dropzone 클래스가 있는 모든 양식요소를 찾아 자동으로 첨부하고 드롭한 파일을 지정된 속성에 업로드한다
    [ Dropzone Css 및 스크립트 CDN 링크 ]
                                            
                                                <link href="https://unpkg.com/dropzone@6.0.0-beta.1/dist/dropzone.css" rel="stylesheet" type="text/css" />
    
                                                <script src="https://unpkg.com/dropzone@6.0.0-beta.1/dist/dropzone-min.js"></script>
                                            
                                        
                                        
                                            
                                        
                                    

    * cf) 다음과 같이, Dropzone에 옵션을 추가해줄 수도 있다

                                        
                                            <form action="/target" class="dropzone" id="my-dropzone"></form>
    
                                            <script>
                                                Dropzone.options.myDropzone= { // id명은 camelCase 방식으로 작성해주어야 한다!
                                                    // 설정하려는 옵션들..
                                                }
                                            </script>
                                        
                                    

    스크립트에서 id명(id= "my-dropzone")은 (-이 있다면; 제거하고)camelCase 방식으로 변경해주어야 한다!

    Flatpickr

    는 가볍고 강력한 순수 자바스크립트 날짜/시간 피커이다

    Flatpickr 날짜/시간 피커
    Flatpickr를 사용하기 위해서는; 먼저, Css 링크 및 스크립트 소스를 불러와야 한다. 이어서, 스크립트 초기화 작업 또한 필요하다:
    [ Flatpickr CDN 링크 및 스크립트 소스 ]
                                            
                                                <link href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" rel="stylesheet">
    
                                                <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
                                            
                                        
                                        
                                            
                                        
                                    
                                        
                                            /* 기본 플랫피커 초기화 */
                                            const fp= flatpickr("#FlatpickrInput", {}); // flatpickr
                                        
                                    
                                        
                                            
                                        
                                    
                                        
                                            /* 시간 피커 옵션 설정 */
                                            const fp1= flatpickr("#FlatpickrInput1", {
                                                enableTime: true, noCalendar: true, dateFormat: "H:i"
                                            });
                                        
                                    
                                        
                                            
                                        
                                    
                                        
                                            /* 날짜 & 시간 피커 옵션 설정 */
                                            const fp2= document.querySelector(".myFlatpickrs");
                                            const fp3= flatpickr(fp2, {
                                                enableTime: true, dateFormat: "Y-m-d H:i"
                                            });
                                        
                                    

    여기서는 간단한 기본 예만 들었지만.. 그밖에 다양한 고급 사용법들은 공식 사이트로 가서 살펴보십시오..

    Full Calendar

    는 모듈식으로 구성된, 풀사이즈의 드래그 & 드롭 순수 자바스크립트 이벤트 달력이다

    풀 카렌다
    Full Calendar 플러그인을 사용하기 위해서는; 먼저, 스크립트 소스 및 초기화가 필요하고, 다음에는 그저 간단한 코드 한 줄이면 달력을 삽입할 수 있다: <div id= "calendar"></div>
    [ 풀 카렌다 작성하기 ]
                                            
                                                <body>
                                                    <div id="calendar" class="mb-5"></div>
    
                                                    <script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.4/index.global.min.js'></script>
                                                    <script>
                                                        document.addEventListener('DOMContentLoaded', function() {
                                                            var calendarEl= document.getElementById('calendar')
                                                            var calendar= new FullCalendar.Calendar(calendarEl, {
                                                                initialView: 'dayGridMonth'
                                                            });
                                                            calendar.render()
                                                        });
                                                    </script>
                                                </body>
                                            
                                        

    Sticky-JS

    는 순수 자바스크립트로 작성된 반응형 Sticky 요소 라이브러리로서, 이를 이용하면 웹사이트에서 (추가적인 Css 없이도)Sticky 요소를 쉽게 고정시킬 수 있다!

    스티키 고정 사이드바
    Sticky-JS 플러그인을 사용하려면; 먼저, 스크립트 소스를 불러온 뒤 초기화하면서 스티키 요소를 지정해주어야 한다. 다음, Sticky 요소.sticky 클래스를 추가하여 컴포넌트를 초기화하고, 가장 가까운 부모요소(보통, <body>)에서 data-sticky-container 속성을 준다
    [ Sticky-JS 사용하기 ]
                                            
                                                <script src="vendors/sticky-js/sticky.min.js"></script>
    
                                                <!-- 스티키 요소 초기화 -->
                                                <script>
                                                    var sticky= new Sticky('.sticky') // 스티키 요소: .sticky
                                                </script>
                                            
                                        
                                            
                                                
                                            
                                        

    특정 뷰포트 크기에서부터 스티키를 활성화하기 위해 data-sticky-for= '값' 속성으로 브레이크 포인트를 설정해줄 수 있다(곧, 스티키는 설정된 브레이크포인트 너비보다 작을 때 해제된다). 또한, 스크롤 시 페이지와 스티키 요소 사이에 마진을 주기위해 data-margin-top= '값' 속성을 추가해줄 수도 있다


    * cf) 나아가, data-sticky-wrap= "true" 속성을 사용하면; 그것은 스티키 요소를 가진 <span> .. </span>으로 래핑되는 진정한 스티키 요소이다 - 이는 컨텐츠가 점핑하는 것을 방지한다! Sticky 고정 예

    쿠키 공지창

    플러그인은 방문한 사용자에게 쿠키가 사용됨을 알려주는 가벼운 쿠키 동의 메시지이다

    쿠키 공지
    Osano Cookie 플러그인은 Toast 팝업으로 알림 내용을 표시하는데, .notice 요소에 data-options 옵션을 전달하여 그 동작을 제어할 수 있고, 다음과 같은 옵션들을 추가해줄 수 있다
    • autoShow: false // 페이지 로딩시 자동으로 알림을 표시할 것인가 여부? 기본값: true
    • autoShowDelay: 0 // 알림 표시 전 대기 시간(밀리초)
    • ShowOnce: false // 알림을 처음 한번만 보여줄 것인가? 기본값: true
    • cookieExpireTime: 7200000 // 쿠키 만료시간(밀리초) 사용자가 [닫기]나 [확인] 버튼을 누른 이후부터 카운트가 시작된다!
                                        
                                            
                                        
                                    

    이 페이지의 좌하단에서 귀찮게 나타나는 쿠키 알림창입니다. 로컬 컴퓨터에서는 문제없이 작동되지만, 웹호스팅 업체에 따라 쿠키를 지원하지 않는 경우가 있습니다 - 제 웹서버 클라우드 호스팅이 그런 경우입니다 ㅡㅡ;

    Disqus 댓글게시판

    를 이용하면 쉽게 자신의 웹사이트에 게시판을 달아줄 수 있다 작은 웹사이트라면; 게시판에 Disqus 광고가 포함되고, 게시판을 편집할 수도 없지만.. 그래도 돈(현재 월 20달러 ㅡㅡ;)은 안드는 [Free Version]을 선택하시면 됩니다 Disqus 게시판을 등록하기 전에, 먼저 Disqus 도움말 문서를 찬찬히 살펴보시기를 권합니다..

    웹사이트에 Disqus 게시판 달기
    자신의 웹사이트에 Disqus 게시판을 삽입하려면; 먼저, Disqus에 접속하여 몇 단계의 질문들에 답하면서(메일주소와 비밀번호, 웹사이트 주소가 필요함) 웹사이트 등록 및 사용자 프로필 설정을 마칩니다 Website Name: 부분에는 '숏네임'(= Disqus에서의 포럼)을 넣어주어야 하는데, 이는 Disqus에서의 자기 게시판 ID라고 보면 됩니다

    * cf) 숏네임 shortname 은 Disqus 사이트에 할당된 고유 식별자로서, 사이트에 게시된 모든 댓글은 이 이름으로 참조된다 - 숏네임은 Disqus에 자신의 사이트 댓글과 Disqus 관리자에서 지정한 설정만 불러오도록 지시하는데, Disqus에서 댓글을 관리하려면 자신의 웹사이트를 등록하고 등록한 숏네임을 사용하여 웹사이트에 Disqus를 설치해야 한다

    1. 제대로 진행되면.. 웹사이트 설정 단계로 들어가서 자신의 플랫폼을 선택해줍니다: 워드프레스 등의 특정 플랫폼으로 구축한 사이트라면; 해당 플랫폼을 선택해주면 되고, (이 [소소한 이야기] 사이트처럼)html만으로 직접 만든 웹사이트라면; 맨 아래 있는 Universal Code 를 선택하시면 됩니다
    2. 다음, 자신의 웹문서에서 게시판을 넣어줄 위치에 아래 코드를 넣어줍니다: 아래 스크립트 코드에서 ShortName 에는 위 단계에서 넣어준 Website Name: 이름을 넣어주면 되는데, Disqus에서의 자기 게시판 ID라고 보면 됩니다
    [ Disqus 게시판 스크립트 코드 ]
                                            
                                                <div id="disqus_thread"></div>
    
                                                <script>
                                                    (function() { // 이 스크립트는 수정할 수 없습니다!
                                                        var d= document, s= d.createElement('script');
    
                                                        // 'ShortName'에는 자신의 숏네임을 넣어주십시오!
                                                        s.src= 'https://ShortName.disqus.com/embed.js';
                                                        s.setAttribute('data-timestamp', +new Date());
                                                        (d.head || d.body).appendChild(s);
                                                    }) ();
                                                </script>
    
                                                <noscript>
                                                    Please enable JavaScript to view the
                                                    <a href="https://disqus.com/?ref_noscript" rel="nofollow">
                                                        comments powered by Disqus.
                                                    </a>
                                                </noscript>
                                            
                                        

    Disqus 환경변수 disqus_config() { .. } 함수 내에 추가되며, 숏네임은 예외로 하단에 추가된다:

                                                    
                                                        /* ---
                                                            권장 환경변수: 아래 섹션을 편집하고 댓글을 삭제하여 플랫폼이나 CMS의 동적 값을 삽입하세요
                                                        */
                                                        var disqus_config= function () {
                                                            this.page.url= '현재 페이지의 URL ← 절대 URL';
                                                            this.page.identifier= '현재 페이지의 식별자 ← 문자열 또는 숫자';
                                                            this.page.title= '현재 페이지의 제목';
                                                        };
    
                                                        (function() { // 이 스크립트는 수정할 수 없습니다!
                                                            var d= document, s= d.createElement('script');
    
                                                            s.src= 'https://ShortName.disqus.com/embed.js'; // 'ShortName'에는 자신의 숏네임을 넣어주십시오!
                                                            s.setAttribute('data-timestamp', +new Date());
                                                            (d.head || d.body).appendChild(s);
                                                        }) ();
                                                    
                                                

    웹 폰트 사용하기

    온라인 웹폰트를 사용하고자 한다면; 웹문서에 한 두줄의 간단한 코드를 넣어주는 것만으로 바로 사용할 수 있다!

    구글 웹폰트 사용하기
    Google 웹폰트를 사용하려면; 먼저, 사이트에서 원하는 폰트를 찾아 <head>에 링크해주는 것이 우선이고, 이어서 구글 Web 폰트 사용을 위한 Css 스타일을 사용자 정의해준다
    [ Google Web Font 설정 및 사용하기 ]
                                            
                                                
                                            
                                        

    이제, 웹폰트를 적용하고자 하는 <body> 내부 특정 요소(들)에서.. 위에서 만들어 놓은 사용자정의 클래스 스타일을 입혀주면 됩니다: 선거결과 촌평 <span class="webfont_lead">선거결과 촌평</span>

    Plugin Etc

    여타 플러그인 라이브러리들
    는 웹 문서에 html, Css, Script 코드를 삽입하기 위한 플러그인 라이브러리로서, 프리즘을 사용하려면; 먼저, Css 링크 및 스크립트 소스를 필요로 한다
    [ Prism Css 링크 및 스크립트 소스 ]
                                            
                                                <link href="https:///prismjs@v1.x/themes/prism.css" rel="stylesheet" />
    
                                                <script src="https:///prismjs@v1.x/components/prism-core.min.js"></script>
                                                <script src="https:///prismjs@v1.x/plugins/autoloader/prism-autoloader.min.js"></script>
                                            
                                        

    이 html 코드를 담은 박스가 바로 프리즘 Css 및 Script 소스에다 약간의 사용자정의 Css를 추가하여 작성한 것입니다

    플러그인은 이미지가 로드되었는 지를 감지하는데, 그저 웹문서에 아래 스크립트 CDN 링크를 포함시켜주면 된다!
                                        
                                            <script src="https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js"></script>
                                        
                                    
    마이크로 체크 플러그인. types, regexps, presence, time 등 확인
    모듈성, 성능 및 추가 기능을 제공하는 최신 JavaScript 라이브러리
    ➥ Css 3) 플로팅 오브젝트

    플로팅 오브젝트는 미묘하게 떠다니는 물체를 페이지에 추가하는데, 컨테이너와 개체 수를 정의하고 내부에 적절한 개수의 빈 <span> 태그만 추가하면 그 이후는 자동으로 작동한다 - 크기와 불투명도, 방향 및 스피드 등은 랜덤이다!

    [ 플로팅 오브젝트 ]
                                            
                                                
                                            
                                        
                                            
                                                .floating-objects {
                                                    position: absolute; top: 0; left: -20px; right: 0;
                                                    width: calc(100% + 20px); height: 100%;
                                                    overflow: hidden;
                                                } .floating-objects span {
                                                    position: absolute;
                                                    display: block; width: 20px; height: 20px;
                                                    background-color: #232323;
                                                }
                                            
                                        

    이 페이지의 맨 위 헤더에서 떠다니고 있는 넘들입니다.. 기본 형태는 사각형이지만 클래스나 사용자 정의 스타일을 써서 쉽게 변경할 수 있습니다!

    ➥ Css 3) 스크린 프레임

    프레임 안에는 모든 크기, 모든 종류의 이미지를 넣을 수 있지만.. 태블릿에는 572px x 375px, 폰에는 228px x 495px(및 같은 종횡비)가 권장된다

    photo-19 laptop-frame
    photo-19 photo-frame
                                                        
                                                            
                                                        
                                                    
                                                        
                                                            .device-laptop {
                                                                position: relative;
                                                            } .device-laptop img {
                                                                position: relative; object-fit: cover; overflow: hidden;
                                                            } .device-laptop img.screen {
                                                                position: absolute; top: 0.5%; left: 14.5%;
                                                                width: 70.5%; height: 87%; border-radius: 4.5% 4.5% 0 0;
                                                            }
                                                            
                                                            .device-iphone {
                                                                position: relative;
                                                            } .device-iphone img {
                                                                position: relative; object-fit: cover; overflow: hidden;
                                                            } .device-iphone img.screen {
                                                                position: absolute; top: 2.5%; left: 8%;
                                                                width: 84.2%; height: 92.8%; border-radius: 5%;
                                                            }
                                                        
                                                    
    ➥ Css 3) Avata 만들기

    이 아바타는 정사각형 이미지에서 가장 잘 작동하며, 아바타 크기보다 2배 큰 이미지를 사용할 때 가장 좋은 품질이 나온다

                                                        
                                                            
                                                        
                                                    
                                                        
                                                            .avata {
                                                                position: relative; height: 2rem; width: 2rem;
                                                                display: inline-flex; align-items: center; justify-content: center;
                                                                border-radius: 50%;
                                                            } .avata .avata-img {
                                                                height: 2rem; width: auto;
                                                                border-radius: 100%;
                                                                object-fit: cover;
                                                            }
    
                                                            .avata-xs { height: 1.25rem; width: 1.25rem; }
                                                            .avata-xs .avata-img { height: 1rem; }
                                                            .avata-sm { height: 1.75rem; width: 1.75rem; }
                                                            .avata-sm .avata-img { height: 1.5rem; }
                                                            .avata-lg { height: 2.5rem; width: 2.5rem; }
                                                            .avata-lg .avata-img { height: 2.5rem; }
                                                            .avata-xl { height: 3rem; width: 3rem; }
                                                            .avata-xl .avata-img { height: 3rem; }
                                                            .avata-xxl { height: 3.75rem; width: 3.75rem; }
                                                            .avata-xxl .avata-img { height: 3.75rem; }
    
                                                            .avata-busy::before, .avata-idle::before, .avata-offline::before, .avata-online::before {
                                                                content: ""; position: absolute; bottom: 5%; right: 5%; width: 20%; height: 20%;
                                                                border-radius: 50%; background-color: #d7dce3; border: 0.0625rem solid #fff;
                                                            }
                                                            .avata-busy::before { background-color: #e81500; }
                                                            .avata-idle::before { background-color: #f4a100; }
                                                            .avata-offline::before { background-color: #d7dce3; }
                                                            .avata-online::before { background-color: #00ac69; }
                                                        
                                                    

    부트스트랩 스크립트

    거의 모든 부트스트랩 플러그인은 html의 data- 속성만으로 활성화하고 구성할 수 있는데, 하나의 요소에는 단지 하나의 데이터 속성 세트만 사용해야 한다 - 예컨대, 하나의 버튼으로 툴팁과 모달을 한번에 트리거할 수는 없다!

    부트스트랩에서 스크립트 사용하기
    모든 플러그인은 첫번째 인수로 Css 선택자를 받아들일 수 있게 되었는데, DOM 요소 또는 적절한 Css 선택자를 전달하여 플러그인의 새 인스턴스를 만들 수 있다. 스크립트 옵션은 data-bs- 속성이나 자바스크립트를 통해 전달할 수 있으므로, data-bs-animation= "값";과 같은 방식으로 줄 수 있다
                                        
                                            const modal= new bootstrap.Modal('#myModal')
                                            const dropdown= new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
                                        
                                    

    * cf) Bootstrap 5) 버전에서부터 모든 자바스크립트 플러그인의 data- 속성은 기존의 data-*에서 data-bs-*로 이름이 변경되었는데, 옵션 이름은 camalCase 방식에서 kebab-case 방식으로 변경해주어야 한다! 한편, 부트스트랩에서 드롭다운, 팝오버 및 툴팁 등은 Popper 플러그인을 사용한다!

    스크립트에서 DOM 요소를 쿼리할 때, 기본적으로 querySelectorquerySelectorAll 속성을 사용한다. 부트스트랩은 대부분의 플러그인 고유 작업에 대한 사용자정의 이벤트를 제공하는데, 일반적으로 show 같은 동사 형태는 이벤트가 시작될 때 트리거되고, shown 같은 과거분사 형태는 작업 완료 시 트리거된다
                                        
                                            const myModal= document.querySelector('#myModal')
        
                                            myModal.addEventListener('show.bs.modal', event => {
                                                if (!data) {
                                                    return event.preventDefault() // stops modal from being shown
                                                }
                                            })
                                        
                                    

    모든 동사 형태 이벤트는 preventDefault(); 메서드를 제공하는데, 이는 작업이 시작되기 전에 실행을 중지하는 기능을 제공한다 이벤트 핸들러에서 false 를 반환하면 자동으로 호출된다!

    플러그인 인스턴스
    특정 플러그인의 인스턴스를 얻고자 한다면; 각 플러그인은 getInstance(); 메서드를 노출하므로, 요소로부터 직접 인스턴스를 검색하려면 다음과 같이 하면 된다: bootstrap.Popover.getInstance(myPopoverE1); 요청된 요소에 대해 인스턴스가 시작되지 않은 경우 null 이 리턴된다!
    한편, getOrCreateInstance(); 메서드는 DOM 요소와 연결된 인스턴스를 가져오거나, (없다면;)새로이 인스턴스를 만들어 반환한다: bootstrap.Popover.getOrCreateInstance(myPopoverE1, configObject); 인스턴스가 초기화되지 않은 경우, 두번째 인수를 받아 선택적 구성 객체로 사용한다!
                                        
                                            const modal= new bootstrap.Modal('#myModal')
                                            const dropdown= new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
                                            const offcanvas= bootstrap.Offcanvas.getInstance('#myOffcanvas')
                                            const alert= bootstrap.Alert.getOrCreateInstance('#myAlert')
                                        
                                    

    모든 플러그인 생성자는 DOM 요소 또는 적절한 Css 선택자를 첫번째 인수로 받을 수 있는데, 부트스트랩은 단일 요소만 지원하므로 플러그인 요소들은 querySelector(); 메서드로 찾을 수 있다!

    비동기식 API
    모든 프로그래밍 방식 API 메서드는 비동기식이며, 따라서 일단 트랜지션이 시작되면; 종료하기 전에 곧바로 호출자에게 반환되고, 트랜지션이 완성되면; 액션을 실행하기 위해 해당 이벤트를 수신할 수 있다. 한편, 트랜지션 컴포넌트에 대한 메서드 호출은 무시된다
                                        
                                            const myCollapseEl= document.querySelector('#myCollapse')
    
                                            myCollapseEl.addEventListener('shown.bs.collapse', event => {
                                                // Action to execute once the collapsible area is expanded
                                            })
                                        
                                    
                                        
                                            const myCarouselEl= document.querySelector('#myCarousel')
                                            const carousel= bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
    
                                            myCarouselEl.addEventListener('slid.bs.carousel', event => {
                                                carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
                                            })
    
                                            carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
                                            carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
                                        
                                    
    버튼 인스턴스 만들기
    부트스트랩의 .btn 생성자를 써서 버튼 인스턴스를 만들 수 있는데, dispose();, getInstance();, getOrCreateInstance(); 외에 toggle();(버튼 활성화 상태를 토글한다) 메서드를 사용할 수 있다
                                        
                                            const bsButton= new bootstrap.Button('#myButton');
                                    
                                            // 모든 버튼을 토글한다
                                            document.querySelectorAll('.btn').forEach(buttonElement => {
                                                const button= bootstrap.Button.getOrCreateInstance(buttonElement)
                                                button.toggle()
                                            });
                                        
                                    

    스크립트 API는 Javascript를 모르는 상태에서는 이해하기에 어렵고, 또 당장 쓸 일도 없을 터이니.. 대충, 대충,, 보시고 나중에 Javascript를 배우게 된다면; 그때 한번 다시 살펴보십시오 ㅡㅡ;

    wave