PageSourceSearch

https://www.shatura.com/local/templates/page/js/slider-initializations.js

js shatura.com collected 2026-10-02 04:58:28 UTC 24,525 bytes, 804 lines download raw bytes

1// CЛАЙДЕРЫ (ИНИЦИАЛИЗАЦИЯ, НАСТРОЙКА)
2
3window.addEventListener('DOMContentLoaded', () => {
4
5    // слайдер первый экран на главной странице
6
7    let swiper1_1 = new Swiper(".preview__swiper", {
8        pagination: {
9            el: ".swiper-pagination",
10            clickable: true,
11        },
12        slidesPerView: 1,
13        spaceBetween: 6,
14        effect: 'fade',
15        autoplay: {
16            delay: __app.is_mobile() ? 7000 : 10000,
17        }
18    });
19
20    let swiper1_2 = new Swiper(".preview__side", {
21        pagination: {
22            el: ".swiper-pagination",
23            clickable: true,
24        },
25        slidesPerView: 1,
26        spaceBetween: 6,
27        effect: 'fade'
28    });
29
30    swiper1_1.controller.control = swiper1_2;
31    swiper1_2.controller.control = swiper1_1;
32
33
34    // слайдер 'популярные категории' на главной странице
35
36    let swiper2 = new Swiper(".popular__swiper", {
37        navigation: {
38            nextEl: ".popular__wrap .swiper-button-next",
39            prevEl: ".popular__wrap .swiper-button-prev",
40        },
41        slidesPerView: 2.25,
42        grabCursor: true,
43        breakpoints: {
44            360: {
45                slidesPerView: 2.35
46            },
47            480: {
48                slidesPerView: 3.35
49            },
50            640: {
51                slidesPerView: 2.5
52            },
53            780: {
54                slidesPerView: 3.5
55            },
56            1024: {
57                slidesPerView: 4.5
58            },
59            1200: {
60                slidesPerView: 5
61            }
62        }
63    });
64
65
66    // слайдер 'акции' на главной странице
67
68    let swiper3 = new Swiper(".sale__swiper", {
69        navigation: {
70            nextEl: ".sale .swiper-button-next",
71            prevEl: ".sale .swiper-button-prev",
72        },
73        scrollbar: {
74            el: ".swiper-scrollbar",
75            draggable: true,
76        },
77        pagination: {
78            el: ".swiper-pagination",
79            clickable: true,
80        },
81        slidesPerView: 1,
82        grabCursor: true,
83        spaceBetween: 20,
84        breakpoints: {
85            640: {
86                slidesPerView: 2,
87                spaceBetween: 0
88            },
89            780: {
90                slidesPerView: 2.5,
91                spaceBetween: 0
92            },
93            1024: {
94                slidesPerView: 3,
95                spaceBetween: 0
96            },
97        },
98        autoplay: {
99            delay: __app.is_mobile() ? 7000 : 10000,
100        }
101    });
102
103
104    // слайдер 'лучшие предложения' на главной странице
105
106    let swiper4 = new Swiper(".offers__swiper", {
107        navigation: {
108            nextEl: ".offers__inner .swiper-button-next",
109            prevEl: ".offers__inner .swiper-button-prev",
110        },
111        slidesPerView: 1,
112        spaceBetween: 10,
113        grabCursor: true,
114        breakpoints: {
115            360: {
116                spaceBetween: 20,
117                slidesPerView: 2
118            },
119            640: {
120                spaceBetween: 20,
121                slidesPerView: 3
122            },
123            780: {
124                spaceBetween: 20,
125                slidesPerView: 4
126            },
127            1024: {
128                spaceBetween: 42,
129                slidesPerView: 4
130            },
131        }
132    });
133
134
135    // слайдер 'дизайн-проекты' на главной странице
136
137    let swiper5 = new Swiper(".design__swiper", {
138        pagination: {
139            el: ".swiper-pagination",
140            clickable: true,
141        },
142        slidesPerView: 1,
143        spaceBetween: 10,
144    });
145
146
147    // ф-ция для слайдеров 'хиты продаж', 'новинки';
148
149    function carousel1(item1, item2, item3) {
150
151        let swiper6 = new Swiper(item1, {
152            navigation: {
153                nextEl: item2,
154                prevEl: item3
155            },
156            slidesPerView: 1.27,
157            slidesPerGroup: 1,
158            spaceBetween: 25,
159            observer: true,
160            observeParents: true,
161            observeSlideChildren: true,
162            setWrapperSize: 4,
163            breakpoints: {
164                480: {
165                    slidesPerView: 1.7,
166                    spaceBetween: 25,
167                },
168                640: {
169                    slidesPerView: 2.25,
170                    spaceBetween: 25,
171                },
172                780: {
173                    slidesPerView: 2.7,
174                    spaceBetween: 25,
175                },
176                1024: {
177                    slidesPerView: 3.5,
178                    spaceBetween: 25,
179                },
180                1200: {
181                    slidesPerView: 4,
182                    spaceBetween: 34,
183                }
184            }
185        });
186
187    }
188
189
190    // слайдер 'хиты продаж' (на главной странице)
191
192    carousel1('.slider-hits .slider__swiper', '.slider-hits .swiper-button-next', '.slider-hits .swiper-button-prev');
193
194    // слайдер 'новинки' (на главной странице)
195
196    carousel1('.slider-new .slider__swiper', '.slider-new .swiper-button-next', '.slider-new .swiper-button-prev');
197
198
199    // слайдер 'мы рекомендуем' (на странице пустой корзин
199ы)
200
201    carousel1('.slider-rec .slider__swiper', '.slider-rec .swiper-button-next', '.slider-rec .swiper-button-prev');
202
203    // слайдер 'мебель для кабинета' (на странице 'корпоративные решения')
204
205    carousel1('.slider-furniture-cabinet .slider__swiper', '.slider-furniture-cabinet .swiper-button-next', '.slider-furniture-cabinet .swiper-button-prev');
206
207    // слайдер 'мебель для офиса' (на странице 'корпоративные решения')
208
209    carousel1('.slider-furniture-office .slider__swiper', '.slider-furniture-office .swiper-button-next', '.slider-furniture-office .swiper-button-prev');
210
211    // слайдер 'мебель для гостиницы' (на странице 'корпоративные решения')
212
213    carousel1('.slider-furniture-hotel .slider__swiper', '.slider-furniture-hotel .swiper-button-next', '.slider-furniture-hotel .swiper-button-prev');
214
215
216    // слайдер в карточке товара
217    /*
218        let swiper7 = new Swiper(".card__swiper", {
219            scrollbar: {
220                el: ".card__inner .swiper-scrollbar",
221                draggable: true,
222            },
223            slidesPerView: 1,
224            // allowTouchMove: false,
225            nested: true
226        });
227
228     */
229
230
231    // слайдер на странице 'спальня'
232
233    let swiper8 = new Swiper(".bedroom__swiper", {
234        navigation: {
235            nextEl: ".bedroom__slider-inner .swiper-button-next",
236            prevEl: ".bedroom__slider-inner .swiper-button-prev",
237        },
238        slidesPerView: 2.28,
239        spaceBetween: 10,
240        breakpoints: {
241            480: {
242                slidesPerView: 2.5
243            },
244            640: {
245                slidesPerView: 3.5
246            },
247            1024: {
248                slidesPerView: 4
249            }
250        }
251    });
252
253
254    // слайдер на странице 'матрасы и все для сна'
255
256    let swiper9 = new Swiper(".sleep__swiper", {
257        navigation: {
258            prevEl: ".sleep__slider .swiper-button-prev",
259            nextEl: ".sleep__slider .swiper-button-next",
260        },
261        slidesPerView: 2.2,
262        spaceBetween: 10,
263        breakpoints: {
264            360: {
265                slidesPerView: 1.45,
266                spaceBetween: 10
267            },
268            480: {
269                slidesPerView: 2.5,
270                spaceBetween: 10
271            },
272            640: {
273                slidesPerView: 3.5,
274                spaceBetween: 10
275            },
276            1024: {
277                slidesPerView: 5,
278                spaceBetween: 10
279            }
280        }
281    });
282
283
284    // слайдер на странице 'спальня'
285
286    let swiper10 = new Swiper(".slider-collcections__swiper", {
287        navigation: {
288            nextEl: ".slider-collcections__next",
289            prevEl: ".slider-collcections__prev",
290        },
291        slidesPerView: 1,
292        spaceBetween: 10,
293        // breakpoints: {
294        //     480: {
295        //         slidesPerView: 2.5
296        //     },
297        //     640: {
298        //         slidesPerView: 3.5
299        //     },
300        //     1024: {
301        //         slidesPerView: 4
302        //     }
303        // }
304    });
305
306
307    // слайдер на странице товара, таб 'отзывы'
308
309    let swiper13 = new Swiper(".reviews__swiper", {
310        slidesPerView: 4,
311        spaceBetween: 8,
312        observer: true,
313        observeParents: true,
314        observeSlideChildren: true,
315        breakpoints: {
316            600: {
317                slidesPerView: 5,
318                spaceBetween: 20
319            },
320        }
321    });
322
323
324    // подсчёт количества оставшихся слайдов в слайдере 'фото и видео покупателей' на странице товара в табе 'отзывы'
325
326    if (document.querySelector('.js_reviews_slider_num')) {
327
328        const reviewsSlideNum = document.querySelector('.js_reviews_slider_num');
329        let reviewsSlideQuantity = document.querySelectorAll('.reviews__swiper .swiper-slide').length;
330
331        if (window.innerWidth >= 600) {
332            reviewsSlideQuantity = reviewsSlideQuantity - 5;
333        } else {
334            reviewsSlideQuantity = reviewsSlideQuantity - 4;
335        }
336
337        if (reviewsSlideQuantity > 0) {
338            reviewsSlideNum.textContent = '+' + reviewsSlideQuantity;
339        } else {
340            reviewsSlideNum.textContent = '';
341        }
342
343
344    }
345
346
347    // слайдер на странице товара, таб 'отзывы', блок с отзывом
348
349    let swiper14 = new Swiper(".reviews__item-swiper", {
350        slidesPerView: 3,
351        spaceBetween: 10,
352        observer: true,
353        observeParents: true,
354        observeSlideChildren: true,
355        breakpoints: {
356            1200: {
357                spaceBetween: 24
358            }
359        }
360    });
361
362
363    // ф-ция для слайдеров c выбором цвета на странице товара в сайдбаре;
364
365    function carousel2(item1, item2, item3) {
366
367        let swiper15 = new Swiper(item1, {
368            navigation: {
369                nextEl: item2,
370                prevEl: item3
371            },
372            slidesPerView: 6.2,
373            spaceBetween: 12,
374            breakpoints: {
375                480: {
376                    slidesPerView: 7
377                },
378                1024: {
379                    slidesPerView: 4
380                }
381            }
382        });
383
384    }
385
386    // слайдер на странице коллекции
387
388    let swiper16 = new Swiper(".page-collection__swiper", {
389        navigation: {
390            nextEl: ".swiper-button-next",
391            prevEl: ".swiper-button-prev",
392        },
393        slidesPerView: 1,
394        spaceBetween: 10,
395        // effect: 'fade'
396    });
397
398
399    // слайдер 'c этим товаром покупают' на странице товара в поп-апе 'товар добавлен в коризну'
400
401    let swiper17 = new Swiper(".add2cart__slider .slider__swiper", {
402        navigation: {
403            nextEl: ".add2cart__slider .swiper-button-next",
404            prevEl: ".add2cart__slider .swiper-button-prev",
405        },
406        slidesPerView: 1.27,
407        spaceBetween: 25,
408        breakpoints: {
409            480: {
410                slidesPerView: 1.7,
411                spaceBetween: 25,
412            },
413            640: {
414                slidesPerView: 2.1,
415                spaceBetween: 25,
416            },
417            1200: {
418                slidesPerView: 2.1,
419                spaceBetween: 34,
420            }
421        }
422    });
423
424
425    // слайдеры на странице 'все товары'
426
427    let swiper18 = new Swiper('.all-products__swiper', {
428        navigation: {
429            nextEl: ".swiper-button-next",
430            prevEl: ".swiper-button-prev",
431        },
432        slidesPerView: 1.5,
433        spaceBetween: 20,
434        observer: true,
435        observeParents: true,
436        observeSlideChildren: true,
437        breakpoints: {
438            360: {
439                slidesPerView: 2.4
440            },
441            640: {
442                slidesPerView: 2.5
443            },
444            780: {
445                slidesPerView: 4.5,
446            },
447            1024: {
448                slidesPerView: 5.4
449            }
450        }
451    });
452
453
454    // слайдер 'не забудьте купить' в карточке твоара в корзине
455
456    let swiper19 = new Swiper('.item-cart__swiper', {
457        slidesPerView: 1.27,
458        spaceBetween: 25,
459        breakpoints: {
460            480: {
461                slidesPerView: 1.7,
462                spaceBetween: 25,
463            },
464            640: {
465                slidesPerView: 2.25,
466                spaceBetween: 25,
467            },
468            780: {
469                slidesPerView: 1.75,
470                spaceBetween: 25,
471            },
472            920: {
473                slidesPerView: 2.3,
474                spaceBetween: 25,
475            },
476            1024: {
477                slidesPerView: 2.5,
478                spaceBetween: 25,
479            },
480            1200: {
481                slidesPerView: 5.65,
482                spaceBetween: 32
483            }
484        }
485    });
486
487
488    // слайдер 'вам может понравиться ' на странрице новости, и подобные слайдеры на других страницах
489
490    let swiper20 = new Swiper('.carousel__swiper', {
491        navigation: {
492            nextEl: ".swiper-button-next",
493            prevEl: ".swiper-button-prev",
494        },
495        slidesPerView: 1.2,
496        spaceBetween: 10,
497        breakpoints: {
498            480: {
499                slidesPerView: 1.5,
500                spaceBetween: 10
501            },
502            640: {
503                slidesPerView: 2.5,
504                spaceBetween: 10
505            },
506            1200: {
507                slidesPerView: 3,
508                spaceBetween: 25
509            }
510        }
511    });
512
513
514    // слайдер 'вам может понравиться ' на странрице новости, и подобные слайдеры на других страницах
515
516    let swiper21 = new Swiper('.stock__block-actual .swiper', {
517        navigation: {
518            nextEl: ".stock__block-actual .swiper-button-next",
519            prevEl: ".stock__block-actual .swiper-button-prev",
520        },
521        slidesPerView: 1.27,
522        grid: {
523            rows: 1,
524        },
525        spaceBetween: 14,
526        breakpoints: {
527            480: {
528                slidesPerView: 1.65,
529                spaceBetween: 14,
530            },
531            640: {
532                slidesPerView: 2.5,
533                spaceBetween: 14,
534            },
535            780: {
536                slidesPerView: 3.5,
537                spaceBetween: 14,
538            },
539            1200: {
540                slidesPerView: 3,
541                spaceBetween: 23,
542                grid: {
543                    rows: 2,
544                },
545            }
546        }
547    });
548
549
550    // слайдер на странице коллекции
551
552    let swiper22 = new Swiper(".page-store__swiper", {
553        navigation: {
554            nextEl: ".swiper-button-next",
555            prevEl: ".swiper-button-prev",
556        },
557        slidesPerView: 1,
558        spaceBetween: 10,
559        // effect: 'fade'
560    });
561
562
563    // слайдер на странице коллекции
564
565    let swiper23 = new Swiper(".delivery__swiper", {
566        slidesPerView: 1.5,
567        spaceBetween: 30,
568        breakpoints: {
569            // 480: {
570
571            // },
572            600: {
573                slidesPerView: 2.5,
574            },
575            780: {
576                slidesPerView: 4.5,
577            },
578            1024: {
579                slidesPerView: 4.5,
580            }
581        }
582    });
583
584
585    // слайдер 'нашими клиентами уже стали' на странице 'корпоративные решения'
586
587    let swiper24 = new Swiper('.corporate-solutions__clients .swiper', {
588        navigation: {
589            nextEl: ".corporate-solutions__clients .swiper-button-next",
590            prevEl: ".corporate-solutions__clients .swiper-button-prev",
591        },
592        slidesPerView: 1.25,
593        spaceBetween: 20,
594        breakpoints: {
595            480: {
596                slidesPerView: 1.5,
597                spaceBetween: 20,
598            },
599            640: {
600                slidesPerView: 2.35,
601                spaceBetween: 30
602            },
603            780: {
604                slidesPerView: 2.65,
605                spaceBetween: 30
606            },
607            920: {
608                slidesPerView: 3.5,
609                spaceBetween: 30
610            },
611            1200: {
612                slidesPerView: 4,
613                spaceBetween: 53
614            }
615        }
616    });
617
618
619    // слайдер 'отзывы' на странице 'корпоративные решения'
620
621    let swiper25 = new Swiper('.corporate-solutions__reviews-inner .swiper', {
622        navigation: {
623            nextEl: ".corporate-solutions__reviews-inner .swiper-button-next",
624            prevEl: ".corporate-solutions__reviews-inner .swiper-button-prev",
625        },
626        slidesPerView: 1.2,
627        spaceBetween: 25,
628        watchSlidesProgress: true,
629        breakpoints: {
630            480: {
631                slidesPerView: 2.5,
632            },
633            780: {
634                slidesPerView: 3.5,
635            },
636            1024: {
637                slidesPerView: 4.5,
638            },
639            1200: {
640                slidesPerView: 5,
641            }
642        },
643        // mousewheel: {
644        //     sensitivity: 1,
645        // }
646    });
647
648
649    // слайдер в поп-апе 'сертификаты' на странице 'корпоративные решения'
650
651    let swiper25_1 = new Swiper(".corporate-solutions__modal-swiper", {
652        slidesPerGroup: 1,
653        thumbs: {
654            swiper: swiper25,
655        },
656        effect: 'fade',
657        observer: true,
658        observeParents: true,
659        observeSlideChildren: true,
660    });
661
662
663    // before-after (до и после) слайдер на странице '3d планировщик комнаты'
664
665    if (document.querySelector('.js_plan_slider_after')) {
666
667        function initComparisons() {
668            var x;
669            /* Find all elements with an "overlay" class: */
670            x = document.querySelector(".js_plan_slider_after");
671
672            compareImages(x);
673
674            function compareImages(img) {
675                var slider, img, clicked = 0, w, h;
676                /* Get the width and height of the img element */
677                w = img.offsetWidth * 2;
678                h = img.offsetHeight;
679                /* Set the width of the img element to 50%: */
680                img.style.width = (w / 2) + "px";
681                /* Create slider: */
682                slider = document.createElement("DIV");
683                sliderArrows = document.createElement("SPAN");
684                slider.setAttribute("class", "plan__slider-handle");
685                slider.append(sliderArrows);
686                /* Insert slider */
687                img.parentElement.insertBefore(slider, img);
688                /* Position the slider in the middle: */
689                // slider.style.top = (h / 2) - (slider.offsetHeight / 2) + "px";
690                slider.style.right = (w / 2) - (slider.offsetWidth / 2) + "px";
691                /* Execute a function when the mouse button is pressed: */
692                slider.addEventListener("mousedown", slideReady);
693                /* And another function when the mouse button is released: */
694                window.addEventListener("mouseup", slideFinish);
695                /* Or touched (for touch screens: */
696                slider.addEventListener("touchstart", slideReady);
697                /* And released (for touch screens: */
698                window.addEventListener("touchend", slideFinish);
699
700                function slideReady(e) {
701                    /* Prevent any other actions that may occur when moving over the image: */
702                    e.preventDefault();
703                    /* The slider is now clicked and ready to move: */
704                    clicked = 1;
705                    /* Execute a function when the slider is moved: */
706                    window.addEventListener("mousemove", slideMove);
707                    window.addEventListener("touchmove", slideMove);
708                }
709
710                function slideFinish() {
711                    /* The slider is no longer clicked: */
712                    clicked = 0;
713                }
714
715                function slideMove(e) {
716                    var pos;
717                    /* If the slider is no longer clicked, exit this function: */
718                    if (clicked == 0) return false;
719                    /* Get the cursor's x position: */
720                    pos = getCursorPos(e)
721                    /* Prevent the slider from being positioned outside the image: */
722                    if (pos < 0) pos = 0;
723                    if (pos > w) pos = w;
724                    /* Execute a function that will resize the overlay image according to the cursor: */
725                    slide(pos);
726                }
727
728                function getCursorPos(e) {
729                    var a, x = 0;
730                    e = (e.changedTouches) ? e.changedTouches[0] : e;
731                    /* Get the x positions of the image: */
732                    a = img.getBoundingClientRect();
733                    /* Calculate the cursor's x coordinate, relative to the image: */
734                    x = a.right - e.pageX;
735                    // x = e.pageX - a.left;
736                    //console.log('a.right ' + a.right);
737                    //console.log('e.pageX ' + e.pageX);
738                    //console.log('x ' + x);
739                    /* Consider any page scrolling: */
740                    x = x - window.pageXOffset;
741                    return x;
742                }
743
744                function slide(x) {
745                    /* Resize the image: */
746                    img.style.width = x + "px";
747                    /* Position the slider: */
748                    slider.style.right = img.offsetWidth - (slider.offsetWidth / 2) + "px";
749                }
750            }
751        }
752
753        initComparisons();
754
755    }
756
757
758    // слайдеры с цветовыми палитрами на странице 'кухня'
759
760    if (document.querySelector('.js_page_kitchen_block_inner')) {
761
762        const pageKitchenBlockInners = document.querySelectorAll('.js_page_kitchen_block_inner');
763
764        pageKitchenBlockInners.forEach(inner => {
765
766            const slider = inner.querySelector('.swiper');
767            const prev = inner.querySelector('.swiper-button-prev');
768            const next = inner.querySelector('.swiper-button-next');
769            const pageKitchenColors = inner.querySelectorAll('.js_page_kitchen_block_colors_grid span');
770            const pageKitchenSliderColor = inner.querySelector('.js_page_kitchen_block-slider-color');
771
772            let swiper = new Swiper(slider, {
773                navigation: {
774                    nextEl: next,
775                    prevEl: prev,
776                },
777                slidesPerView: 1,
778                spaceBetween: 10,
779                effect: 'fade',
780                loop: true,
781                speed: 0
782
783            });
784
785            swiper.on('slideChange', () => {
786                // //console.log(swiper.activeIndex);
787                pageKitchenColors.forEach(color => {
788                    color.classList.remove('active');
789                });
790                pageKitchenColors[swiper.realIndex].classList.add('active');
791                pageKitchenSliderColor.textContent = pageKitchenColors[swiper.realIndex].dataset.color;
792            });
793
794            pageKitchenColors.forEach((color, i) => {
795                color.addEventListener('click', () => {
796                    swiper.slideToLoop(i);
797                });
798            });
799
800
801        });
802
803    }
804});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.