1 |
|
2 | export default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {
|
3 | const swiper = this;
|
4 | const {
|
5 | params,
|
6 | animating,
|
7 | snapGrid,
|
8 | slidesGrid,
|
9 | rtlTranslate,
|
10 | enabled
|
11 | } = swiper;
|
12 | if (!enabled) return swiper;
|
13 |
|
14 | if (params.loop) {
|
15 | if (animating && params.loopPreventsSlide) return false;
|
16 | swiper.loopFix();
|
17 |
|
18 | swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
|
19 | }
|
20 |
|
21 | const translate = rtlTranslate ? swiper.translate : -swiper.translate;
|
22 |
|
23 | function normalize(val) {
|
24 | if (val < 0) return -Math.floor(Math.abs(val));
|
25 | return Math.floor(val);
|
26 | }
|
27 |
|
28 | const normalizedTranslate = normalize(translate);
|
29 | const normalizedSnapGrid = snapGrid.map(val => normalize(val));
|
30 | let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
|
31 |
|
32 | if (typeof prevSnap === 'undefined' && params.cssMode) {
|
33 | let prevSnapIndex;
|
34 | snapGrid.forEach((snap, snapIndex) => {
|
35 | if (normalizedTranslate >= snap) {
|
36 |
|
37 | prevSnapIndex = snapIndex;
|
38 | }
|
39 | });
|
40 |
|
41 | if (typeof prevSnapIndex !== 'undefined') {
|
42 | prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
|
43 | }
|
44 | }
|
45 |
|
46 | let prevIndex = 0;
|
47 |
|
48 | if (typeof prevSnap !== 'undefined') {
|
49 | prevIndex = slidesGrid.indexOf(prevSnap);
|
50 | if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
|
51 |
|
52 | if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
|
53 | prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
|
54 | prevIndex = Math.max(prevIndex, 0);
|
55 | }
|
56 | }
|
57 |
|
58 | return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
|
59 | } |
\ | No newline at end of file |