/* do galerii zdjec przesuwany w poziomie */ var Galerie_multi = new Class ({ Implements: [Options], options: { lewo: null, prawo: null, bannery: null, overlay: null, margines: 0, selector: 'ul li', active: { from: null, class: null }, widoczne_start: 4, start: 1, responsive : {}, }, itemNum: [], initialize: function(config) { this.setOptions(config); var szer = this.options.szerokosc; var margines = this.options.margines; var widoczne_start_or = this.options.widoczne_start; var startel = this.options.start; var screen_width = window.innerWidth; if (Object.keys(this.options.responsive).length) { widoczne_start_or = 0; Object.each(this.options.responsive, function(value, key) { if (key == 0) { widoczne_start_or = value.widoczne_start; } if (key < screen_width) { widoczne_start_or = value.widoczne_start; } }); } if (!$$(this.options.blok)) { return false; } var bloki = $$(this.options.blok); var i = 1; bloki.each(function(el) { var rekordy = el.getElement(this.options.overlay); var wrapper = el.getElement(this.options.bannery); var lewo = this.options.lewo; var prawo = this.options.prawo; var ile = wrapper.getElements(this.options.selector).length; var widoczne_start = widoczne_start_or; var szerokoscel = szer; var marginesel = margines; wrapper.setStyle('left','0px'); // obliczenia var over_szer = parseInt(rekordy.offsetWidth); ile_widac = over_szer/widoczne_start; proc = ile_widac/szerokoscel; if ((proc > 0.5) && (proc < 0.8)) { widoczne_start--; } else if (proc < 0.5) { widoczne_start = widoczne_start-Math.round(Math.log2(widoczne_start)); if (widoczne_start == 0) { widoczne_start = 1; } } ile_widac = over_szer/widoczne_start; proc = ile_widac/szerokoscel; szerokoscel = parseInt(szerokoscel*proc); wrapper.getElements(this.options.selector).setStyle('width',szerokoscel); this.itemNum[i] = (this.options.active.from) ? this.options.active.from-1 : 0; szer_max = (ile * szerokoscel)-parseInt(rekordy.offsetWidth) - marginesel; marginesel = 0; if (szer_max < 0) { szer_max = 0; } var scroll = new Fx.Morph(wrapper, { duration: 'long', transition: Fx.Transitions.Sine.easeOut }); var lewo = el.getElement(lewo); var prawo = el.getElement(prawo); lewo.addClass('end'); lewo.removeEvents('click'); prawo.removeEvents('click'); this.w_lewo(wrapper,scroll,ile,lewo,prawo,szerokoscel,szer_max,marginesel,i); this.w_prawo(wrapper,scroll,ile,lewo,prawo,szerokoscel,szer_max,marginesel,i); this.setactive(wrapper,ile,i); var periodicalID; var begin = function() { periodicalID = (function() { prawo.fireEvent('click'); }).periodical(5000); } begin(); this.touchswipe(el,lewo,prawo,periodicalID); el.addEvents({ mouseenter: function() { clearInterval(periodicalID); }, mouseleave: begin }); if (startel > 1) { var przesun = startel * (szerokoscel+marginesel); if (przesun >= szer_max) { przesun = szer_max; prawo.addClass('end'); } scroll.start({left: '-'+przesun}); } i++; }.bind(this)); }, w_lewo: function(wrapper,scroll,ile,lewo,prawo,szer,szer_max,marginesel,i) { var othis = this; lewo.addEvent('click',function() { pozycja = parseInt(wrapper.getStyle('left')); przesun = pozycja+marginesel+szer; prawo.removeClass('end'); var nr = othis.itemNum[i]; if (nr < othis.options.active.from) { othis.itemNum[i] = othis.options.active.from-1; } else { othis.itemNum[i]--; } othis.setactive(wrapper,ile,i); if (przesun >= 0) { przesun = 0; lewo.addClass('end'); } scroll.start({left: przesun}); return false; }); }, w_prawo: function(wrapper,scroll,ile,lewo,prawo,szer,szer_max,marginesel,i) { var othis = this; var ile = wrapper.getElements(this.options.selector).length-1; prawo.addEvent('click',function() { pozycja = parseInt(wrapper.getStyle('left')); przesun = szer+marginesel-pozycja; lewo.removeClass('end'); if (przesun >= szer_max) { przesun = szer_max; prawo.addClass('end'); } var nr = othis.itemNum[i]+1; if (nr+1 <= ile) { othis.itemNum[i]++; } othis.setactive(wrapper,ile,i); scroll.start({left: '-'+przesun}); return false; }); }, touchswipe: function(el,lewo,prawo,period) { var othis = this; el.addEvent('touchstart', function(e) { if (e.touches.length == 1) { clearInterval(period); var startX = e.changedTouches[0].pageX; el.addEvent('touchend', function(ee) { var x = ee.changedTouches[0].pageX; var dx = startX - x; if (Math.abs(dx) >= 50) { var all = (dx > 0 ? 'swipeleft' : 'swiperight'); if (all == 'swiperight') { lewo.fireEvent('click'); } else { prawo.fireEvent('click'); } el.removeEvents('touchend'); } }); } }); }, setactive: function(wrapper,ile,i) { if (ile < 2) { return false; } if (!this.options.active.class) { return false; } var nr = this.itemNum[i]; var elementy = wrapper.getElements(this.options.selector); elementy.removeClass(this.options.active.class); elementy[nr].addClass(this.options.active.class); } });