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.