简体   繁体   English

Swiper Slider:滚动条/鼠标滚轮控制 2 个滑块实例时出现问题

[英]Swiper Slider : Problem with scrollbar / mousewheel controlling 2 instances of sliders

I have a mysterious problem with my development.我的开发有一个神秘的问题。

I have inserted 2 sliders which work perfectly.我插入了 2 个效果很好的滑块。

My first swiper slider have a scrollbar and mousewheel activated.我的第一个刷卡器 slider 激活了滚动条和鼠标滚轮。 And the other NO scrollbar and NO mousewheel.另一个没有滚动条和鼠标滚轮。 I am using "data" attributes to get parameters from the HTML.我正在使用“数据”属性从 HTML 获取参数。

This is my problem: when I use mousewheel on the first slider, it works, and the scrollbar move too.这是我的问题:当我在第一个 slider 上使用鼠标滚轮时,它起作用了,滚动条也移动了。 But when I move/drag the second slider, the scrollbar of the first slider move too.但是当我移动/拖动第二个 slider 时,第一个 slider 的滚动条也会移动。 And the mousewheel event is active on the second slider which is very strange because the parameter is false.并且鼠标滚轮事件在第二个 slider 上处于活动状态,这很奇怪,因为参数为 false。

Here is my code这是我的代码


<!-- Slider 1 -->
<div class="swiper swiper-slider" data-slides-per-view="[2.5,2,1]" data-slides-spacing="[120,30,10]" data-mousewheel="true" data-sensitivity="1" data-freemode="true">
<div class="swiper-wrapper">
  <div class="swiper-slide">
    <div class="card card-post">
    <div class="card-img">
    <img width="500" height="800" src="image.jpg" alt="" class="img-fluid">
    </div>
    <div class="card-body">
    <p class="card-title">Title of post</p>
    </div>
    </div>
  </div>
</div>
</div>

<!-- Slider 2 -->
<div class="swiper swiper-slider" data-slides-per-view="[3,2,1]" data-slides-spacing="[50,30,10]" data-mousewheel="" data-sensitivity="" data-freemode="">
<div class="swiper-wrapper">
  <div class="swiper-slide">
    <div class="card card-post">
    <div class="card-img">
    <img width="500" height="800" src="image.jpg" alt="" class="img-fluid">
    </div>
    <div class="card-body">
    <p class="card-title">Title of post</p>
    </div>
    </div>
  </div>
</div>
</div>


<script>
jQuery( window ).on( 'elementor/frontend/init', () => {
    elementorFrontend.hooks.addAction('frontend/element_ready/swiper-slider-widget.default', function ($scope, $) {
        
            var slider = $('.swiper-slider');
            if(slider.length){    
            var dataSlidesPerView = slider.data("slides-per-view");
            var dataSlidesSpacing = slider.data("slides-spacing");
            var dataMouseWheel = slider.data("mousewheel");
            var dataSensitivity = slider.data("sensitivity");
            var dataFreemode = slider.data("freemode");
     
            var swiperSlider = new Swiper(".swiper-slider", {
                freeMode: {
                enabled: dataFreemode,
                sticky: false,
                momentumBounce: false,
                },
                mousewheel: {
                enabled: dataMouseWheel,
                sensitivity: dataSensitivity,
                },
                touchEventsTarget: 'container',
                navigation: {
                nextEl: ".swiper-button-next",
                prevEl: ".swiper-button-prev"
                },
                scrollbar: {
                el: '.swiper-scrollbar',
                draggable: true,
                dragSize: 100,
                },
                breakpoints: {
                0: {
                    slidesPerView: dataSlidesPerView[2],
                    spaceBetween: dataSlidesSpacing[2],
                    centeredSlides: false,
                },
                768: {
                    slidesPerView: dataSlidesPerView[1],
                    spaceBetween: dataSlidesSpacing[1],
                    centeredSlides: false,
                },
                1280: {
                    slidesPerView: dataSlidesPerView[0],
                    spaceBetween:  dataSlidesSpacing[0],
                    centeredSlides: false,
                    }  
                }
            });

        }

    } );
});

</script>

EDIT: i added scrollbar option in your html and i changed your js, now it should be working编辑:我在你的 html 中添加了滚动条选项,我改变了你的 js,现在它应该可以工作了

jQuery( window ).on( 'elementor/frontend/init', () => {
    elementorFrontend.hooks.addAction('frontend/element_ready/swiper-slider-widget.default', function ($scope, $) {
        var slider = $('.swiper-slider');
        if(slider.length){
            var dataSlidesPerView = slider.data("slides-per-view");
            var dataSlidesSpacing = slider.data("slides-spacing");
            var dataMouseWheel = slider.data("mousewheel");
            dataMouseWheel = dataMouseWheel === 'true' || dataMouseWheel === true;
            var dataSensitivity = slider.data("sensitivity");
            var dataFreemode = slider.data("freemode");
            dataFreemode = dataFreemode === 'true' || dataFreemode === true;
            var dataScrollbar = slider.data("scrollbar");
            dataScrollbar = dataScrollbar === 'true' || dataScrollbar === true;
     
            const swiperParams = {
                freeMode: {
                enabled: dataFreemode,
                sticky: false,
                    momentumBounce: false,
                },
                mousewheel: {
                    enabled: dataMouseWheel,
                    sensitivity: dataSensitivity,
                },
                touchEventsTarget: 'container',
                navigation: {
                    nextEl: ".swiper-button-next",
                    prevEl: ".swiper-button-prev"
                },
                scrollbar: {
                    enabled: dataScrollbar,
                    el: '.swiper-scrollbar',
                    draggable: true,
                    dragSize: 100,
                },
                breakpoints: {
                    0: {
                        slidesPerView: dataSlidesPerView[2],
                        spaceBetween: dataSlidesSpacing[2],
                        centeredSlides: false,
                    },
                    768: {
                       slidesPerView: dataSlidesPerView[1],
                        spaceBetween: dataSlidesSpacing[1],
                        centeredSlides: false,
                    },
                    1280: {
                        slidesPerView: dataSlidesPerView[0],
                        spaceBetween:  dataSlidesSpacing[0],
                        centeredSlides: false,
                    }
                }
            };

            var swiperSlider = new Swiper(".swiper-slider", swiperParams);
        }
    });
});

if this is not working, you should create one swiper at time in this manner:如果这不起作用,您应该以这种方式一次创建一个滑动器:

new Swiper("#swiperWithScrollbar", swiperWithScrollbarParams);
new Swiper("#swiperWithoutScrollbar", swiperWithoutScrollbarParams);

editing params in order to get only what you need, in my case i'm creating each swiper individually with a jquery().each() and using html attributes as are you doing and it's working with different swipers made in different ways (PS: i'm assigning an id via jquery, if this does not exists so i have to manage the attributes only, code below)编辑参数以便仅获得您需要的内容,在我的例子中,我正在使用 jquery().each() 单独创建每个刷卡器,并像您一样使用 html 属性,并且它正在使用以不同方式制作的不同刷卡器(PS :我正在通过 jquery 分配一个 ID,如果它不存在,那么我只能管理属性,代码如下)

let newSelector = element.attr('id');
if(!newSelector) {
  newSelector = 'cmbSwiper' + index;
  element.attr('id', newSelector);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM