PageSourceSearch

https://www.rhein-neckar-kreis.de/site/Rhein-Neckar-Kreis-2026/res…/10.4.2.1.21/js/functions-swiper.js

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

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.