PageSourceSearch

https://www.winnenden.de/site/Winnenden-2025/resourceCached/10a/js/functions-swiper.js

js winnenden.de collected 2026-10-02 09:59:05 UTC 11,789 bytes, 362 lines download raw bytes

1//=======Swiper========
2var arr=[];
3var i = 0;
4
5jQuery(document).ready(function(){
6  setTimeout(function () {
7    //createSwiper(
8    //   Element das zum Swiper werden soll, 
9    //   Elemente die als Slide verwendet werden sollen, 
10    //   Klassen die dem Element zugefügt werden sollen
11    //   centerSlide?, 
12    //   Spacebetween mit breakpoints
13    //   Spalten -- alternativ über Klassenname
14    //   Spalten mobil beibehalten
15    //)
16      jQuery('.basecontent-stage .bx-wrapper').addClass('bx-wrapper_stage')
17      jQuery('.basecontent-stage .bx-wrapper').removeClass('bx-wrapper')
18
19      if(jQuery(window).width() < 800){
20        createSwiper('.home .basecontent-stage', '.stage_items:not(.invisible) > .stage_item:not(.stage__load_more)', 'basecontent-stage', false, [0, 0, 0, 0], 0, true)
21      }
22
23      createSwiper('.bx-wrapper_stage', '.image_slider > figure',  '', false, [36, 20, 10, 0], 0, false)
24      createSwiper('.bx-wrapper', '.bxSlider > div',  '', false, [0, 0, 0, 0], 0, false)
25      //createSwiper('.pm-topnews', '.c-pm-meldung-wrapper',  '', false, [36, 20, 10, 0], 4, false)
26      createSwiper('.imageGallery.swiperGallery', '.galleryImage', '', true, [36, 20, 10, 0], 0, false)
27
28  }, 200);
29});
30
31function createSwiper(element, child, className, center, space, cols, colsMo){
32  jQuery(element).css('display', 'none')
33  var auto = false;
34  //Klassennamen beibehalten - bei bx-wrapper irrelevant
35  var swiperName = ''
36  var slideName = ''
37  if(element != '.bx-wrapper'){
38    swiperName = element.split('.')[1]
39    slideName = child.split('.')[1]
40  }
41  if(jQuery(element).length > 0){
42    jQuery(element).each(function(){
43      var gallery = false;
44      var currentSwiper = '.swiper-' + i
45      var currentSwiperName = 'swiper-' + i
46
47      //Prüfen ob Slider automatisch durchlaufen soll - wenn JA dann start/stopp hinzufügen
48      if(jQuery(this).hasClass('auto') || jQuery('.bx-controls-auto', this).length > 0){
49        auto = true;
50      }
51      else{
52        auto = false;
53      }
54
55      //Grundkonstrukt aufbauen
56      jQuery('<div class="swiper ' + currentSwiperName + ' ' + swiperName + '"></div>').insertAfter(jQuery(this))
57      jQuery(currentSwiper).append('<div class="swiper-wrapper ' + className + '"></div>')
58      jQuery(child, this).addClass('swiper-slide' + ' ' + slideName);
59
60      jQuery(currentSwiper + ' .swiper-wrapper').append(jQuery('.swiper-slide', this))
61
62      jQuery(currentSwiper).wrap('<div class="swiperParent"></div>')
63      jQuery('.swiperParent', jQuery(this).parent()).parent().addClass('swiperArticle')
64
65      //Parent markieren
66      if(jQuery(this).hasClass('pm-topnews')){
67        jQuery('.swiperParent', jQuery(this).parent()).addClass('topnews')
68      }
69      if(jQuery(this).hasClass('imageGallery')){
70        jQuery('.swiperParent', jQuery(this).parent()).addClass('gallery')
71      }
72      if(jQuery(this).hasClass('basecontent-stage')){
73        jQuery('.swiperParent', jQuery(this).parent()).addClass('stageParent')
74      }
75      if(jQuery(this).hasClass('bx-wrapper_stage')){
76        jQuery('.swiperParent', jQuery(this).parent()).addClass('stageParent')
77      }
78
79      //Bildergalerie Zusatz
80      if(jQuery(this).hasClass('imageGallery')){
81        gallery = true
82        jQuery('img', this).unwrap(); //Lightbox entfernen
83
84        //Klon erstellen für die Thumbs
85        jQuery(currentSwiper).clone().insertAfter(jQuery(currentSwiper)).removeClass('swiper').removeClass(currentSwiperName).addClass('swiper-thumbs-' + i).addClass('swiper-thumbs');  
86      }
87
88      //Controls zufügen
89      var pause = '<div class="swiper-button-pause swiper-button-pause-' + i + '" aria-label="Stop" tabindex="0"></div>'
90      var play = '<div class="swiper-button-play swiper-button-play-' + i + '" aria-label="Start" tabindex="0"></div>'
91      var prev = '<div class="swiper-button-prev swiper-button-prev-' + i + '" aria-label="Vorherige Folie" tabindex="0"></div>'
92      var pagination = '<div class="swiper-pagination swiper-pagination-' + i + '"></div>'
93      var next = '<div class="swiper-button-next swiper-button-next-' + i + '" aria-label="Nächste Folie" tabindex="0"></div>'
94      
95      if(auto){
96        var controls = '<div class="controls">' + pause + play + prev + pagination + next + '</div>'
97      }
98      else{
99        var controls = '<div class="controls">' + prev + pagination + next + '</div>'
100      }
101
102      jQuery(currentSwiper).parent().prepend(controls)
103
104      //Spaltenanzahl
105      if(cols == 0){
106        for(var z = 0; z < 6; z++){
107          var name = 'spalten-' + z;
108          var nameClass = '.' + name
109          if(jQuery(nameClass, this).length > 0 || jQuery(this).hasClass(name)){
110            jQuery(currentSwiper).addClass(name)
111            jQuery(currentSwiper).parent().addClass('moreCols')
112
113          }
114        }
115      }
116      else{
117        var name = 'spalten-' + cols;
118        jQuery(currentSwiper).addClass(name)
119        //console.log(jQuery(currentSwiper))
120        jQuery(currentSwiper).parent().addClass('moreCols')
121        if(colsMo){
122          jQuery(currentSwiper).addClass('mobileColsSame')
123        }
124
125      }
126      
127      //Swipernummer abspeichern
128      arr.push(i)
129      i++
130
131      //Momentanes Element entfernen
132      jQuery(this).remove()
133    });
134
135    //Swiper initialisieren
136    //console.log(arr, element, center)
137    var settings = [arr, '.swiper-', '.swiper-button-next-', '.swiper-button-prev-', '.swiper-button-pause-', '.swiper-button-play-', '.swiper-pagination-', center, space]
138    initSwiper(settings)
139  }
140}
141
142//Swiper initialisieren
143var swiperClass = ''
144var swiperClassGalleryThumbs = '';
145var swiperNextClass = ''
146var swiperPrevClass = ''
147var swiperPauseClass = ''
148var swiperPlayClass = ''
149var swiperPagClass = ''
150var slideView = ''
151var centerSlide = ''
152var spaceBetween1 = '';
153var spaceBetween2 = '';
154var spaceBetween3 = '';
155var spaceBetween4 = '';
156var slideView1 = '';
157var slideView2 = '';
158var slideView3 = '';
159var slideView4 = '';
160
161function initSwiper(settings){
162  //Jeden Swiper für sich initialisieren
163  var counter = settings[0]
164  for(var e=0; e < counter.length; e++){
165    //Klassen mit der jeweiligen Nummerierung des swipers
166    swiperClass = settings[1] + counter[e];
167    swiperClassGalleryThumbs = '.swiper-thumbs-' + counter[e];
168
169    swiperPauseClass = settings[4] + counter[e];
170    swiperPlayClass = settings[5] + counter[e];
171    swiperPrevClass = settings[3] + counter[e];
172    swiperPagClass = settings[6] + counter[e];
173    swiperNextClass = settings[2] + counter[e];
174
175    centerSlide = settings[7];
176
177    spaceBetween1 = settings[8][0];
178    spaceBetween2 = settings[8][1];
179    spaceBetween3 = settings[8][2];
180    spaceBetween4 = settings[8][3];
181
182    slideView1 = 'auto'
183    slideView2 = 'auto'
184    slideView3 = 'auto'
185    slideView4 = 'auto'
186    //console.log(e, settings[7], swiperClass, settings[8])
187    //bei mehrspaltigkeit
188    for(var x = 0; x < 6; x++){
189      var name = 'spalten-' + x;
190      if(jQuery(swiperClass).hasClass(name)){
191        if(x > 1){
192          slideView1 = x;
193          slideView2 = 2;
194          slideView3 = 2;
195        }
196        if(x > 4){
197          slideView2 = 3;
198        }
199        if(jQuery(swiperClass).hasClass('mobileColsSame')){
200          if(x > 1){
201            slideView1 = x;
202            slideView2 = x;
203            slideView3 = x;
204            slideView4 = x;
205          }
206          if(x == 3){
207            slideView1 = x;
208            slideView2 = x;
209            slideView3 = x;
210            slideView4 = 2;
211          }
212          if(x > 4){
213            slideView2 = x;
214          }
215        }
216      }
217    }
218
219    const swiper = new Swiper(swiperClass, {
220      keyboard: true,
221      watchSlidesVisibility: true,
222      loopFillGroupWithBlank: false,
223      centeredSlidesBounds: true,
224      centeredSlides: centerSlide,
225      loop: false,
226
227      nextButton: swiperNextClass,
228      prevButton: swiperPrevClass,
229      pagination: {
230        el: swiperPagClass,
231        clickable: true,
232        dynamicBullets: true,
233        dynamicMainBullets: 4,
234      },
235
236      autoplay:{
237        delay: 4000,
238      },
239
240      slidesPerView: slideView4,
241      spaceBetween: spaceBetween4,
242
243      breakpoints: {
244        500: {
245          slidesPerView: slideView3,
246          spaceBetween: spaceBetween3,
247        },
248
249        800: {
250          slidesPerView: slideView2,
251          spaceBetween: spaceBetween2,
252        },
253
254        1100: {
255          slidesPerView: slideView1,
256          spaceBetween: spaceBetween1,
257        }
258      },
259      on: {
260        init(swiper) {
261          //Looping selber triggern - da loop:true nicht barrierefrei
262          const totalSlidesLen = swiper.slides.length;
263          document.querySelector(swiperPrevClass).addEventListener('click', () => {
264            if (swiper.isBeginning) {
265              swiper.slideTo(totalSlidesLen - 1);
266            } else {
267              swiper.slideTo(swiper.realIndex - 1);
268            }
269          });
270          document.querySelector(swiperNextClass).addEventListener('click', () => {
271            if (swiper.isEnd) {
272              swiper.slideTo(0);
273            } else {
274              swiper.slideTo(swiper.realIndex + 1);
275            }
276          });
277          document.querySelector(swiperPrevClass).addEventListener('keydown', (z) => {
278            if(z.key == "Enter"){
279              if (swiper.isBeginning) {
280                swiper.slideTo(totalSlidesLen - 1);
281              } else {
282                swiper.slideTo(swiper.realIndex - 1);
283              }
284            }
285          });
286          document.querySelector(swiperNextClass).addEventListener('keydown', (z) => {
287            if(z.key == "Enter"){
288              if (swiper.isEnd) {
289                swiper.slideTo(0);
290              } else {
291                swiper.slideTo(swiper.realIndex + 1);
292              }
293            }
294          });
295          
296          //Autoplay
297          if(document.querySelector(swiperPlayClass)){
298            var pause = swiperPauseClass
299            var play = swiperPlayClass
300            document.querySelector(swiperPlayClass).classList.add('active')
301            document.querySelector(swiperPauseClass).addEventListener('click', () => {
302              document.querySelector(play).classList.remove('active')
303              document.querySelector(pause).classList.add('active')
304              this.autoplay.stop();
305            });
306            document.querySelector(swiperPlayClass).addEventListener('click', () => {
307              this.autoplay.start();
308              document.querySelector(pause).classList.remove('active')
309              document.querySelector(play).classList.add('active')
310            });
311          }
312          else{
313            this.autoplay.stop();
314          }
315
316          //Buttons disable wenn keine weitere Slide
317          if(swiper.slides.length <= swiper.params.slidesPerView ){
318            swiper.$el[0].parentElement.classList.add('disabled')
319          }
320          else{
321            swiper.$el[0].parentElement.classList.remove('disabled')
322          }
323        },
324      }
325    });
326
327    //Bildergalerie
328    if(jQuery(swiperClassGalleryThumbs).length > 0){
329      var swiperThumbs = new Swiper(swiperClassGalleryThumbs, {
330        spaceBetween: 10,
331        centeredSlides: true,
332        slidesPerView: 6,
333        touchRatio: 0.2,
334        slideToClickedSlide: true,
335        loop: false,
336        loopedSlides: 4,
337
338        slidesPerView: slideView4,
339
340        breakpoints: {
341          500: {
342            slidesPerView: slideView3 * 2,
343          },
344
345          800: {
346            slidesPerView: slideView2 * 2,
347          },
348
349          1100: {
350            slidesPerView: slideView1 * 2,
351          }
352        },
353      });
354      swiper.controller.control = swiperThumbs;
355      swiperThumbs.controller.control = swiper;
356    }
357
358    jQuery(swiperClass).css('display', 'block')
359
360  }
361}
362

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.