Двунаправленные ползунки с колесом мыши в Angular с использованием Swiper
Я пытаюсь создать два ползунка, которые будут прокручиваться по горизонтали (в противоположном направлении) при запуске события колесика мыши.
Как видите, использовать Swiper API довольно просто со следующими конфигурациями:
var swiper = new Swiper('.row-top', {
freeMode: true,
slidesPerView: 4,
preloadImages: true,
lazy: true,
loop: true,
mousewheel: {
invert: true,
eventsTarget: 'body'
},
});
var swiper = new Swiper('.row-bottom', {
freeMode: true,
slidesPerView: 4,
preloadImages: true,
lazy: true,
loop: true,
mousewheel: {
invert: false,
eventsTarget: 'body'
},
});
Это работает как шарм, как вы можете видеть здесь:https://jsfiddle.net/sx0mc9po/
Я использую колесико мыши eventsTarget: 'body'
так что событие прокрутки будет запущено в любом месте страницы.
В Angular я использую ngx-swiper-wrapper
как директива, и Swiper отлично работает:
<div class="swiper-controller">
<div class="swiper-container row-top" [swiper]="configTop">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
<div class="swiper-slide">Slide 5</div>
<div class="swiper-slide">Slide 6</div>
<div class="swiper-slide">Slide 7</div>
<div class="swiper-slide">Slide 8</div>
<div class="swiper-slide">Slide 9</div>
</div>
</div>
<div class="swiper-container row-bottom" [swiper]="configBottom">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
<div class="swiper-slide">Slide 5</div>
<div class="swiper-slide">Slide 6</div>
<div class="swiper-slide">Slide 7</div>
<div class="swiper-slide">Slide 8</div>
<div class="swiper-slide">Slide 9</div>
</div>
</div>
</div>
Конфигурация такая же, как упомянуто выше. Но Angular полностью игнорирует вариант
mousewheel: {
...
eventsTarget: 'body'
},
Мой указатель мыши должен навести на swiper-контейнер, иначе он не будет прокручивать какой-либо контейнер. Поскольку есть два swiper-контейнера, он прокручивает только один.
Я не уверен, что это ошибка, или Angular не позволяет включить слушателя body
из этого компонента. Если да, то есть ли обходной путь или я что-то упускаю?
1 ответ
Основываясь на их документации, установите модуль Swiper Mousewheel в свой контроллер:
import { Component } from '@angular/core';
// import Swiper core and required modules
import SwiperCore, { Mousewheel, Navigation, Pagination, Scrollbar, A11y } from 'swiper';
// install Swiper modules
SwiperCore.use([Mousewheel, Navigation, Pagination, Scrollbar, A11y]);
Дополнительная информация: https://swiperjs.com/angular.