Plug-ins

[웹코딩 가이드] 홈

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

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


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


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');
                                    
                                

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는 매우 멋진 움직임들을 보여주지만, 그 사용법은 지극히 단순합니다 - 그저 아무 요소에서건(예컨대, 아래 <pre> 요소) data-aos-* 코드를 넣어주기만 하면 됩니다 ^^

                                    
                                        
                                    
                                

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= 속성을 가진 요소가 뷰포트에 보여진 이후, 현재로부터 남은 시간을 카운팅한다

                                    
                                        
                                    
                                
                                    
                                        
                                    
                                

수식 입력기

은 수학 표기를 기술하고 그 구조와 내용을 담고 있는 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>에서 에디터용 컨테이너를 만들어주어야 한다
                                    
                                        
                                    
                                

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


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

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

이제, 수식을 삽입할 html 문서에서.. 아래와 같이 <div> 및 <span> 등의 html 요소를 작성해주고, 위 컨테이너에서 작성된 수식 코드를 이 안에 복사해주면 된다: <div lang="latex">2^{3}</div>

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>
                                            
                                        

    쿠키 공지창

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

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

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

    Plugin Etc

    여타 플러그인 유틸리티들
    웹사이트를 꾸며주는 각종 플러그인 라이브러리들:
    서식 있는 텍스트 편집을 위한 가장 인기 있는 JavaScript 라이브러리
    이미지가 로드되었는 지를 감지한다
                                        
                                            <script src="https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js"></script>
                                        
                                    
    마이크로 체크 플러그인. types, regexps, presence, time 등 확인
    모듈성, 성능 및 추가 기능을 제공하는 최신 JavaScript 라이브러리
    JavaScript를 위한 풍부하고 강력한 템플릿 언어
    워크플로우를 자동화하고 향상시키는 JavaScript 툴킷

    부트스트랩 스크립트

    거의 모든 부트스트랩 플러그인은 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를 배우게 된다면; 그때 한번 다시 살펴보십시오 ㅡㅡ;

    ➥ 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; }
                                                
                                            
    wave