jQuery_シームレススクロールホイール効果プラグインパッケージ

12081 ワード

jQueryを使用して、シームレススクロールマルチキャスト効果プラグインをカプセル化します.
効果図:
オンラインプレビュー:jQuery_LKMarqueeSlideshow
GitHubダウンロードアドレス
互換性:
プラグインパラメータの説明:
  • speed:スクロール速度、タイプ:number.
  • slidesPerView:同時に表示されるslideの数、タイプ:number.
  • loopAdditionalSlides:いくつかのマルチキャスト要素をコピーして現在のマルチキャスト要素に追加した後、タイプ:number.
  • mode:スクロール方向、変更パラメータを設定せずにデフォルトで水平スクロール、verticalに設定し、垂直スクロール.
  • changeType:移動方向を変更し、デフォルトではクリック、「mouseenter」に設定し、マウスを切り替え方向に移動します.
  • arrow_left:運動方向を変更し、タイプ:HTMLラベル.
  • arrow_right:動きの方向を変更し、タイプ:HTMLラベル.

  • HTML
    "slide_container slide_demo">
    "slide_wrapper">
    "slide_item" style="background-color: #4390ee;">item1
    "slide_item" style="background-color: #ff8604;">item2
    "slide_item" style="background-color: #49a430;">item3
    "arrow"> "arrow_left"><< "arrow_right">>>

    CSS
    .slide_container { position: relative; overflow: hidden; width: 600px; margin: 20px auto; }
    .slide_wrapper { position: absolute; top: 0; left: 0; overflow: hidden; }
    .slide_item { font-size: 24px; line-height: 250px; overflow: hidden; height: 250px; text-align: center; }
    .arrow i { position: absolute; z-index: 1; top: 50%; display: inline-block; cursor: pointer; }
    .arrow .arrow_left { left: 20px; }
    .arrow .arrow_right { right: 20px; }
    

    JSコール
    "jquery-1.8.3.min.js"</span>>
    "LKMarqueeSlideshow.js"</span>>
    
    $(<span class="hljs-function"><span class="hljs-title">function</span></span>() {
        $(<span class="hljs-string">".slide_demo"</span>).LKMarqueeSlideshow({
            // speed: 2,
            slidesPerView: 1,
            loopAdditionalSlides: 1,
            // mode: <span class="hljs-string">"vertical"</span>,
            changeType: <span class="hljs-string">"mouseenter"</span>,
            arrow_left: <span class="hljs-string">".arrow_left"</span>,
            arrow_right: <span class="hljs-string">".arrow_right"</span>
        });
    });
    
    

    JSパッケージカード
    LKMarqueeSlideshow.js
    /**
     * Title: LKMarqueeSlideshow
     * Version: 1.1.1
     * Description: plugin
     * Author: LiuZhenghe
     * Date: 2019-01-10
     */
    
    (function($) {
        // What does the LKMarqueeSlideshow plugin do?
        $.fn.LKMarqueeSlideshow = function(options) {
    
            if (!this.length) {
                return this;
            };
    
            var opts = $.extend(true, {}, $.fn.LKMarqueeSlideshow.defaults, options);
    
            this.each(function() {
                var $this = $(this);
                var slide_container = $(this); //     
                var slide_wrapper = $(this).find('.slide_wrapper'); //     
                var slide_item = $(this).find('.slide_item'); //     
                var item_length = slide_item.length; //       
                var changeType = opts.changeType; //         
                var arrow_left = $(opts.arrow_left); //    
                var arrow_right = $(opts.arrow_right); //    
                var speed = opts.speed; //   
                var timer; //    
                var mode = opts.mode; //     
                var slidesPerView = opts.slidesPerView; //       slide   
                var loopAdditionalSlides = opts.loopAdditionalSlides; //                     
    
                //          loopAdditionalSlides ,      ,        1,                     。
                if (loopAdditionalSlides == null) {
                    loopAdditionalSlides = 1;
                } else {
                    loopAdditionalSlides = loopAdditionalSlides;
                };
    
                //          slidesPerView,      ,        1。
                if (slidesPerView == null) {
                    slidesPerView = 1;
                } else {
                    slidesPerView = slidesPerView;
                };
    
                //                    ,     。
                for (var i = 1; i <= loopAdditionalSlides; i++) {
                    slide_item.clone().appendTo(slide_wrapper);
                }
                slide_item = $(this).find('.slide_item');
    
                //          ,    、      、。
                var slide_height = slide_item[0].clientHeight;
                slide_container.css('height', slide_height);
                var container_width = slide_container[0].clientWidth;
                var container_height = slide_container[0].clientHeight;
    
                // mode     :
                if (mode == "vertical") {
                    //   mode    vertical  ,      。
                    slide_item.css({
                        'width': container_width,
                        'height': container_height / slidesPerView
                    });
                    //          。
                    var wrapper_height = 0;
                    for (var i = 0; i < slide_item.length; i++) {
                        wrapper_height += slide_item[i].clientHeight;
                    };
                    slide_wrapper.css('height', wrapper_height);
                } else {
                    //      mode    ,       ,          。
                    slide_item.css({
                        'width': container_width / slidesPerView,
                        'float': 'left'
                    });
                    //          。
                    var wrapper_width = 0;
                    for (var i = 0; i < slide_item.length; i++) {
                        wrapper_width += slide_item[i].clientWidth;
                    };
                    slide_wrapper.css('width', wrapper_width);
                };
    
                //      :
                function moveFun() {
                    //       :
                    if (mode == "vertical") {
                        var wrapper_top = slide_wrapper[0].offsetTop; //          
                        var wrapper_height = slide_wrapper[0].offsetHeight; //      
                        //                        ,          。
                        if (wrapper_top < -(slide_wrapper[0].offsetHeight / (loopAdditionalSlides + 1))) {
                            slide_wrapper[0].style.top = 0;
                        } else if (wrapper_top > 0) {
                            //             0 (        ),                  ,            。
                            slide_wrapper[0].style.top = -(wrapper_height / (loopAdditionalSlides + 1)) + "px";
                        };
                        //      top    =            + speed,          ,       ,      。
                        slide_wrapper[0].style.top = slide_wrapper[0].offsetTop - speed + "px";
    
                    } else {
                        //       :
                        var wrapper_left = slide_wrapper[0].offsetLeft; //          
                        var wrapper_width = slide_wrapper[0].offsetWidth; //      
                        //                        ,          。
                        if (wrapper_left < -(slide_wrapper[0].offsetWidth / (loopAdditionalSlides + 1))) {
                            slide_wrapper[0].style.left = 0;
                        } else if (wrapper_left > 0) {
                            //             0 (        ),                  ,            。
                            slide_wrapper[0].style.left = -(wrapper_width / (loopAdditionalSlides + 1)) + "px";
                        };
                        //      left    =            + speed,          ,       ,      。
                        slide_wrapper[0].style.left = slide_wrapper[0].offsetLeft - speed + "px";
                    };
                };
                //   0.02s         ,      。
                timer = setInterval(moveFun, 20);
    
                //              
                slide_container.mouseenter(function(event) {
                    event.preventDefault();
                    clearInterval(timer);
                });
                //              
                slide_container.mouseleave(function(event) {
                    event.preventDefault();
                    timer = setInterval(moveFun, 20);
                });
    
                //               ,     。
                if (slide_item.length / 2 == 1) {
                    clearInterval(timer);
                };
    
                //         :
                //   changeType     "mouseenter",        。
                //   changeType         ,        。
                var speed_new = opts.speed;
                if (changeType == "mouseenter") {
                    arrow_left.mouseenter(function(event) {
                        event.preventDefault();
                        speed = speed_new;
                    });
                    arrow_right.mouseenter(function(event) {
                        event.preventDefault();
                        speed = -speed_new;
                    });
                } else {
                    arrow_left.click(function(event) {
                        event.preventDefault();
                        speed = speed_new;
                    });
                    arrow_right.click(function(event) {
                        event.preventDefault();
                        speed = -speed_new;
                    });
                };
    
    
            });
    
            return this;
        };
    
        // default options
        $.fn.LKMarqueeSlideshow.defaults = {
            speed: null, //   
            slidesPerView: null, //       slide   
            loopAdditionalSlides: null, //                     
            mode: null, //     
            changeType: null, //         
            arrow_left: null, //    
            arrow_right: null //    
        };
    
    })(jQuery);
    

    ご注目をお待ちしております!