PageSourceSearch

https://www.sympaatti.fi/media/moduulit/slideshow/js/slideshow.js

js sympaatti.fi collected 2026-09-26 19:04:35 UTC 11,182 bytes, 410 lines download raw bytes

1/*
2	slideshow.js
3	
4	(c) Vilperi Oy
5	www.vilperi.fi
6*/
7(function($){
8	
9	// EASING
10	// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
11	
12	var baseEasings = {};
13	
14	$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
15		baseEasings[ name ] = function( p ) {
16			return Math.pow( p, i + 2 );
17		};
18	});
19	
20	$.extend( baseEasings, {
21		Sine: function ( p ) {
22			return 1 - Math.cos( p * Math.PI / 2 );
23		},
24		Circ: function ( p ) {
25			return 1 - Math.sqrt( 1 - p * p );
26		},
27		Elastic: function( p ) {
28			return p === 0 || p === 1 ? p :
29				-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
30		},
31		Back: function( p ) {
32			return p * p * ( 3 * p - 2 );
33		},
34		Bounce: function ( p ) {
35			var pow2,
36				bounce = 4;
37	
38			while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
39			return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
40		}
41	});
42	
43	$.each( baseEasings, function( name, easeIn ) {
44		$.easing[ "easeIn" + name ] = easeIn;
45		$.easing[ "easeOut" + name ] = function( p ) {
46			return 1 - easeIn( 1 - p );
47		};
48		$.easing[ "easeInOut" + name ] = function( p ) {
49			return p < 0.5 ?
50				easeIn( p * 2 ) / 2 :
51				1 - easeIn( p * -2 + 2 ) / 2;
52		};
53	});
54
55	// SLIDER
56	
57	var $totalslides = 1,
58	$options = $(),
59	$slide = $(),
60	$kuvat = {},
61	nyt = 1,
62	timer,
63	animtimer,
64	animtimer2,
65	debug = 0,
66	methods = {
67		init : function(options) {
68			// Defaultit
69			var defaults = {
70				"slidetime": 7000,
71				"suunta":"eri",
72				"liukuefekti":0
73			},
74			$this = $(this);
75			
76			$options = $.extend(defaults,options);
77			
78			// Etsi slidet ja hae määrä
79			$slide = $this.find(".slide");
80			$totalslides = $slide.length;
81			
82			$("#vslider .slide").css("z-index","1");
83			$("#vslider .slide1").hide().css("z-index","3");
84			$("#vslider .loading").show();
85			
86			// Haetaan kuvien left-arvot talteen ja siirretään kuvat ja tekstit piiloon
87			$slide.each(function(index){
88				var $el = $(this),
89				$slidenkuvat = $(this).find(".kuva"),
90				$slidentekstit = $(this).find(".teksti"),
91				k = {},
92				slidenro = "slide" + (index+1);
93				
94				$slidenkuvat.each(function(index) {
95					var l = $(this).css("left"),
96					kuvanro = "kuva" + (index+1);
97					k[kuvanro] = l;
98					
99					$(this).css("left","500%");
100				});
101				$kuvat[slidenro] = k;
102				
103				/* Sliden tekstit piiloon */
104				$slidentekstit.each(function(index) {
105					if($options.suunta == "eri") { $(this).css("left","-500%"); }
106					else { $(this).css("left","500%"); }
107				});
108			});
109			
110			$("#vslider #next").click(function (e) {
111				e.preventDefault();
112				$.fn.vslider('next');
113			});
114			$("#vslider #prev").click(function (e) {
115				e.preventDefault();
116				$.fn.vslider('prev');
117			});
118			$(window).resize(function() {
119				clearInterval(timer);
120				clearInterval(animtimer);
121				$("#vslider").clearQueue();
122				
123				// Tsekataan mennäänkö alle 800px resoluutioon
124				if($(window).width() <= "800") {
125					$.fn.vslider('destroy');
126				} else {
127					timer = setInterval(function(){$.fn.vslider('next')},$options.slidetime);
128				}
129			});
130			
131			$(document).ready(function() {
132				if(!$('#vslider').hasClass("rolling")) {
133					$("#vslider .loading").hide();
134					if($(window).width() >= "800") {
135						$.fn.vslider('start');
136					}
137					else { $("#vslider .slide1").show(); $("#vslider .slide1 .teksti").css("left","auto");}
138				}
139			});
140		},
141		start : function() {
142			if(debug == 1) {console.log("****************************** start ****************************");}
143			$("#vslider").queue(function() {
144				$("#vslider .slide1").show();
145				$("#vslider").addClass("rolling");
146	
147				if($totalslides > 1) {
148					timer = setInterval(function(){$.fn.vslider('next')},($options.slidetime+1500));
149				}
150				animoi($options,$totalslides,nyt,$kuvat,"n",1);
151				
152				var self = this;
153				animtimer = setTimeout(function () {
154					$(self).dequeue();
155				},800);
156			});
157
158		},
159		next : function() {
160			if(debug == 1) {console.log("****************************** next *****************************");}
161			
162			clearInterval(timer);
163			clearInterval(animtimer);
164			clearInterval(animtimer2);
165			$("#vslider").clearQueue();
166			
167			timer = setInterval(function(){$.fn.vslider('next')},$options.slidetime);
168			
169			var edellinen = nyt;
170			nyt++;
171			if(nyt>$totalslides) nyt = 1;
172			
173			animoi($options,edellinen,nyt,$kuvat,"n");
174		},
175		prev : function() {
176			if(debug == 1) {console.log("****************************** prev *****************************");}
177			
178			clearInterval(timer);
179			clearInterval(animtimer);
180			clearInterval(animtimer2);
181			$("#vslider").clearQueue();
182			
183			timer = setInterval(function(){$.fn.vslider('next')},$options.slidetime);
184			
185			var edellinen = nyt;
186			nyt--;
187			if(nyt<1) nyt = $totalslides;
188			
189			animoi($options,edellinen,nyt,$kuvat,"p");
190		},
191		destroy : function() {
192			if(debug == 1) {console.log("****************************** destroy **************************");}
193			// Tuhotaan kaikki animaatiot, resetataan kuvien paikat ja näytetään eka slide.
194			
195			clearInterval(timer);
196			clearInterval(animtimer);
197			clearInterval(animtimer2);
198			$("#vslider").clearQueue();
199			
200			nyt = 1;
201			$slide.not(':first').hide();
202			$slide.filter(':first').show();
203			
204			var $ekatekstit = $("#vslider .slide1").find(".teksti");
205			var $ekakuvat = $("#vslider .slide1").find(".kuva");
206			
207			$ekatekstit.each(function() {
208				$(this).stop().css("left","auto");
209			});
210			$ekakuvat.each(function(index) {
211				var kuvanro = "kuva"+(index+1);
212				var nuu = "slide"+nyt;
213				var $tamaslide = $kuvat[nuu];
214				
215				$(this).stop;
216				$(this).css("left",$tamaslide[kuvanro]);
217			});
218			
219		}
220	};
221	
222	// Animoinnin hoitaminen
223	function animoi($options,edellinen,nyt,$kuvat,suunta,firstfire) {
224		if(debug == 1) {console.log("-> animoi()");}
225		
226		edellinen = "slide"+edellinen;
227		nyt = "slide"+nyt;
228		
229		var $tamaslide = $kuvat[nyt];
230		
231		// Seuraavan sliden tekstit ja kuvat
232		var $nyt_tekstit = $("#vslider ."+nyt).find(".teksti");
233		var $nyt_kuvat = $("#vslider ."+nyt).find(".kuva");
234		
235		///Laitetaan nykyisen sliden tekstien ja kuvien piilotus jonoon.
236		if(!firstfire) {
237			// Piilotettavan sliden tekstit ja kuvat
238			var $ed_tekstit = $("#vslider ."+edellinen).find(".teksti");
239			var $ed_kuvat = $("#vslider ."+edellinen).find(".kuva");
240
241			// Siirretään uuden sliden tekstit ja kuvat oikeaan paikkaan (pois ruudulta)
242			switch($options.suunta) {
243				default:
244					// Mennäänkö seuraavaan vai edelliseen slideen
245					var siirra = "500%";
246					var siirra_txt = 2000;
247					if(suunta == "p") { siirra = "-500%"; siirra_txt = "-2000" }
248						
249					$nyt_tekstit.each(function () { $(this).stop().css("left",siirra_txt); });
250					$nyt_kuvat.each(function () { $(this).stop().css("left",siirra); });
251				break;
252				case "eri":
253					$nyt_tekstit.each(function () { $(this).stop().css("left","-2000"); });
254					$nyt_kuvat.each(function () { $(this).stop().css("left","500%"); });
255				break;
256			}
257
258			$("#vslider").queue(function() {
259				switch($options.suunta) {
260					// Jos suunta-asetus on laitettu samaksi (kaikki samaan suuntaan)
261					default:
262						// Mennäänkö seuraavaan vai edelliseen slideen
263						var kohde = "-500%";
264						var kohde_txt = "-2000";
265						if(suunta == "p") { kohde = "500%"; kohde_txt = "2000" }
266						
267						// Nykyiset tekstit ja kuvat piiloon
268						$ed_tekstit.each(function () { slide($(this),kohde_txt, 750); });
269						$ed_kuvat.each(function () { slide($(this),kohde,750); });
270					break;
271					// Jos eri suunta (tekstit vasemmalle, kuvat oikealle)
272					case "eri":
273						if(debug == 1) {console.log("Kuvat ja tekstit piiloon.");}
274						$ed_tekstit.each(function () { slide($(this),"-2000", 750); });
275						$ed_kuvat.each(function () { slide($(this),"500%",750); });
276					break;
277				}
278				
279				
280				// Poistetaan tämä tapahtuma jonosta
281				var self = this;
282				animtimer = setTimeout(function () {
283					/*$("#vslider ."+edellinen).hide();
284					$("#vslider ."+nyt).show();*/
285					$(self).dequeue();
286				},600);
287			});
288			
289			// Seuraavan sliden feidaus
290			$("#vslider").queue(function() {
291				if($("#vslider ."+nyt+" .taustakuva")) {
292					$("#vslider ."+nyt).stop(true,true).css("z-index","2").show();
293					$("#vslider ."+edellinen).stop(true,true).fadeOut(500);
294					
295					var self = this;
296					setTimeout(function () {
297						$("#vslider ."+edellinen).css("z-index","1");
298						$("#vslider ."+edellinen).hide();
299						$("#vslider ."+nyt).css("z-index","3");
300						
301						$(self).dequeue();
302					},500);
303				}
304				else {
305					$("#vslider ."+edellinen).hide();
306					$("#vslider ."+nyt).show();
307				}
308			});
309		}
310		
311		
312		
313		// Seuraavan sliden tekstit	
314		if(debug == 1) {console.log("Näytetään tekstit.");}
315		
316		$nyt_tekstit.each(function (index) {
317			var tekstinro = "teksti"+(index+1);
318			var $teksti = $("#vslider ."+nyt+" ."+tekstinro);
319			
320			$("#vslider").queue(function () {
321				slide($teksti,'0',850,'easeOutExpo',suunta,$options);
322				
323				var self = this;
324				animtimer = setTimeout(function () {
325					$(self).dequeue();
326				},250);
327			});
328		});
329		
330		// Seuraavan sliden kuvat
331		if(debug == 1) {console.log("Näytetään kuvat.");}
332		$nyt_kuvat.each(function (index) {
333			var kuvanro = "kuva"+(index+1);
334			var $kuva = $("#vslider ."+nyt+" ."+kuvanro);
335			
336			$("#vslider").queue(function () {
337				if($options.liukuefekti == 1) {
338					slide($kuva,$tamaslide[kuvanro],1250, 'bee',suunta,$options);
339					animtimer2 = setTimeout(function () {
340						slide($kuva,$tamaslide[kuvanro],6000,'butterfly');
341					},850);
342					var self = this;
343					animtimer = setTimeout(function () {
344						$(self).dequeue();
345					},200);
346				}
347				else {
348					slide($kuva, $tamaslide[kuvanro],1250, "easeOutCubic", suunta, $options);
349					var self = this;
350					animtimer = setTimeout(function () {
351						$(self).dequeue();
352					},200);
353				}
354			});
355		});
356	}
357	
358	// Sliden liikutus
359	function slide($objekti, minne, aika, easing, suunta, $options) {
360		// Jos easing asetettu
361		if(easing) {
362			// Float like a butterfly, sting like a bee
363			if(easing == 'bee') {
364				minne = minne.replace('%','');
365				
366				if($options.suunta == "sama" && suunta == "p") { minne = parseInt(minne) - 7; }
367				else { minne = parseInt(minne) + 7; }
368				
369				minne = minne + "%";
370
371				$objekti.stop(true,true).animate(
372					{"left":minne},
373					aika, 'easeOutExpo'
374				);
375			}
376			else if(easing == 'butterfly') {
377				var random = Math.floor((Math.random()*2000)+1);
378				aika = aika-random;
379				
380				$objekti.stop(true,true).animate(
381					{"left":minne},
382					{duration:aika, easing:"easeOutExpo", queue:false}
383				);
384			}
385			else {
386				$objekti.stop(true,true).animate(
387					{"left":minne},
388					aika, easing
389				);
390			}
391		}
392		else {
393			$objekti.stop(true,true).animate(
394				{"left":minne},
395				aika
396			);
397		}
398	}
399	
400	$.fn.vslider = function ( method ) {
401		 // Method calling logic
402		if ( methods[method] ) {
403		  return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
404		} else if ( typeof method === 'object' || ! method ) {
405		  return methods.init.apply( this, arguments );
406		} else {
407		  $.error( 'Method ' +  method + ' does not exist on vslider' );
408		}  
409	};
410})(jQuery);

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.