» »

[javascript] Izmenjava teksta in slik

[javascript] Izmenjava teksta in slik

kornilov ::

Pozdravljeni dobri ljudje,
na spletu sem našel kodo za "slider" teksta in slik. Izmenjava je 3 sekunde. Hotel sem dodati še možnost, da s klikom na gumb naprej ali nazaj preskoči na naslednjo oziroma predhodno pozicijo.
Ko kliknem gumb za naprej, se interval pavze razpolovi, in vsak naslednji interval prikazovanja je krajši. :)

Kaj sem dodal ali spremenil v prvotni kodi:
1. Dodal sem kodo med 51 in 63 vrstico
2. Funkciji swapImage() sem dodal parameter(direction), prej je bila prazna; 38 vrstica
3. V HTML kodi sem onclick priredil funkciji swapImage('back' ali 'next'); spodnja koda 6 in 7 vrstica

- Gumb za naprej deluje, zamenja sliko in tekst, vendar zmanjša interval prikazovanja
- Gumb za nazaj deluje napačno in zamenja sliko in tekst naprej, tako kot zgornji gumb

javascript:
// Začetek Slideshow

var i = 0; 		// indeks polja

var image = new Array();   

// Seznam slik, prirejene vrednosti  

image[0] = vrednost_zdravje_slike; 
image[1] = vrednost_ljubezen_slike; 
image[2] = vrednost_druzina_slike;
image[3] = vrednost_finance_slike;   
image[4] = vrednost_druzabnost_slike;
image[5] = vrednost_storilnost_slike; 
image[6] = vrednost_ustvarjalnost_slike; 
image[7] = vrednost_rekreacija_slike;
image[8] = vrednost_spanec_slike;   
image[9] = vrednost_duhovnost_slike;


var k = image.length-1;    // število slik - 1 = 9

var caption = new Array(); 

// Seznam teksta, prirejene vrednosti   

caption[0] = vrednost_zdravje; 
caption[1] = vrednost_ljubezen; 
caption[2] = vrednost_druzina;
caption[3] = vrednost_finance;   
caption[4] = vrednost_druzabnost; 
caption[5] = vrednost_storilnost; 
caption[6] = vrednost_ustvarjalnost; 
caption[7] = vrednost_rekreacija;
caption[8] = vrednost_spanec;   
caption[9] = vrednost_duhovnost;

function swapImage(direction){ 

var el = document.getElementById("tekst_animacija"); 	
el.innerHTML=caption[i]; 

var slika = document.getElementById("slike_animacija"); 
slika.src = image[i];  

if(i < k ) { i++;}   // ko je index polja manjši od (število slik - 1) = 9
else  { i = 0; } 	// postavi zopet na začetek, prvo polje

setTimeout("swapImage()",3000);  // odmor 3 sekunde 

// dodatna koda za naprej in nazaj

 if (direction == 'next' && i <=8){  
 i++;  
 return i;
 }  
  
 if (direction == 'back' && i >=1){  
 i--;  
 return i;
 } 

// konec dodatne kode za naprej in nazaj

} 

function addLoadEvent(func) { 

var oldonload = window.onload; 		// onload event occurs when an object has been loaded

if (typeof window.onload != 'function') {  // typeof operator: vrne niz tipa neocenjenega operanda 
window.onload = func; 

} else  { 
window.onload = function() { 

if (oldonload) { 
oldonload(); 
} 

func(); 
} 		// konec else
;}		// konec window.onload = function()
}  		// konec addLoadEvent(func)

addLoadEvent(function() { 	// izvršitev funkcije addLoadEvent()
swapImage(); 
});  

// Konec Slideshow 

HTML:
<div id ="tekst_animacija">.....</div>
.......
<div>
<img name="slide" id="slike_animacija" alt ="slike za animacijo" height="220" width="240"/>
<input type="button" value="<" onclick="swapImage('back')">
<input type="button" value=">" onclick="swapImage('next')">
</div>

Trinitron ::

Napako imaš v tem, da ti swapImage() v vsakem primeru premakne sliko najprej, šele nato pa preverjaš, ali morda obstaja parameter "direction".

Namig za popravek - zbriši vse svoje vrstice od 53 do 61, nato pa zamenjaj vrstice:
if(i < k ) { i++;}   // ko je index polja manjši od (število slik - 1) = 9
else  { i = 0; }    // postavi zopet na začetek, prvo polje

z vrsticami
if(direction=='next') { i = (i < k ? i+1 : 0);} // rocni pomik naprej
if(direction=='back') { i = (i > 0 ? i-1 : k - 1);} // rocni pomik nazaj
else { i = (i < k ? i+1 : 0);}   // avtomatski premik

hkrati pa moraš ob ročnem premiku še pobrisati prejšnji Timeout z "clearTimeout", sicer ob ročnem premiku sprožiš še eno "nit" avtomatskega premikaja, učinek pa je potem prepolovljen čas, o katerem govoriš.

Zgodovina sprememb…

kornilov ::

Hvala za pomoč. A koda se ni odzivala po mojih željah. Animacija se je zagnala samo en cikel, potem pa se je ustavila. Vrednosti k-jev je bilo potrebno tudi nekoliko popravljati.
Vrnil sem se k svoji "indijanski" kodi ;((, sedaj se odziva tako kot sem si zamislil, takoj preskoči naprej in nazaj, vendar se intervali prikazovanja krajšajo z vsakim klikom naprej ali nazaj.

javascript:
function swapImage(direction){ 

// dodatna koda za naprej in nazaj
 
 if ((direction == 'next') && (i <=8)){ 
setTimeout("swapImage()",0);
 i; 
 return i;
 } 
   
 if ((direction == 'back') && (i >=1)){ 
setTimeout("swapImage()",0);
 i=i-2; 
 	if (i < 1) 
 	{i=0;}
 return i;
 }

clearTimeout(setTimeout("swapImage()",0));
 
// konec dodatne kode za naprej in nazaj

var el = document.getElementById("tekst_animacija"); 	
el.innerHTML=caption[i]; 

var slika = document.getElementById("slike_animacija"); 
slika.src = image[i];   

if(i < k ) {i++;}   // ko je index polja manjši od (število slik - 1) = 9
else  {i = 0;}    // postavi zopet na začetek, prvo polje

setTimeout("swapImage()",3000); // odmor 3 sekunde

clearTimeout(setTimeout("swapImage()",3000));

} 

function addLoadEvent(func) { 

var oldonload = window.onload; 		// onload event occurs when an object has been loaded

if (typeof window.onload != 'function') {  // typeof operator: vrne niz tipa neocenjenega operanda 
window.onload = func; 

} else  { 
window.onload = function() { 

if (oldonload) { 
oldonload(); 
} 

func(); 
} 		// konec else
;}		// konec window.onload = function()
}  		// konec addLoadEvent(func)

addLoadEvent(function() { 	// izvršitev funkcije addLoadEvent()
swapImage(); 
});  

// Konec Slideshow


HTML:
<div id ="tekst_animacija">.....</div>
.......
<div>
<img name="slide" id="slike_animacija" alt ="slike za animacijo" height="220" width="240"/>
<input type="button" value="<" onclick="swapImage('back')">
<input type="button" value=">" onclick="swapImage('next')">
</div>

Zgodovina sprememb…

  • spremenilo: kornilov ()

kornilov ::

Takole sem uredil. Slider se začne izvajati, ko se stran naloži, prikazuje 3 sekunde; tekst in sliko. Imam dva gumb ali bolje sličici, za naprej in nazaj . Ko slider, zaključi cikel, ga s sličico "naprej" znova zaženem. Slider se obnaša bolje ali bolj praktično kot mnogi drugi enostavni, ki sem jih našel na spletu.
Ima samo rahlo hibo, če na zadnji poziciji [9] kliknem nazaj, skoči za dva koraka nazaj [7] in ne za enega [8]. Če se komu da malo pogledati? Ni pa nujno. :)

javascript:
var i = 0; 		// indeks polja

var image = new Array();   

// Seznam slik, prirejene vrednosti  

image[0] = vrednost_zdravje_slike; 
image[1] = vrednost_ljubezen_slike; 
image[2] = vrednost_druzina_slike;
image[3] = vrednost_finance_slike;   
image[4] = vrednost_druzabnost_slike;
image[5] = vrednost_storilnost_slike; 
image[6] = vrednost_ustvarjalnost_slike; 
image[7] = vrednost_rekreacija_slike;
image[8] = vrednost_spanec_slike;   
image[9] = vrednost_duhovnost_slike;


var k = image.length-1;    // število slik - 1 = 9

var caption = new Array(); 

// Seznam teksta, prirejene vrednosti   

caption[0] = vrednost_zdravje; 
caption[1] = vrednost_ljubezen; 
caption[2] = vrednost_druzina;
caption[3] = vrednost_finance;   
caption[4] = vrednost_druzabnost; 
caption[5] = vrednost_storilnost; 
caption[6] = vrednost_ustvarjalnost; 
caption[7] = vrednost_rekreacija;
caption[8] = vrednost_spanec;   
caption[9] = vrednost_duhovnost;


function next(){
var el = document.getElementById("tekst_animacija"); 
el.innerHTML=caption[i]; 
var img= document.getElementById("slike_animacija"); 
img.src= image[i]; 
if(i < k ) { i++;}  // Naprej, zažene tudi animacijo, ko se ta izpelje  
else  { i = 0; }
cajt; 
}

function prev(){
i = i - 2;		// Prvi klik za korak nazaj, vsak nasledjni klik za dva koraka nazaj 
if ((i > 0) && (i < 9)) {i;}
else if (i < 1) { i = 0;}		// Nazaj za 0. indeks 
else if (i > 8) {i= i + 1;}		// Nazaj za zadnji 9. indeks
var el = document.getElementById("tekst_animacija"); 
el.innerHTML=caption[i]; 
var img= document.getElementById("slike_animacija"); 
img.src= image[i];
cajt;
i++;
}

function swapImage(){ 
var el = document.getElementById("tekst_animacija"); 
el.innerHTML=caption[i]; 
var img= document.getElementById("slike_animacija"); 
img.src= image[i];
i++; 
if (i > 9) {i = 9;}		// indeks večji od 9; animacija se ustavi
var cajt = setTimeout("swapImage()",3000);  // Prikaz za 3 sekunde 
} 



function addLoadEvent(func) { 
var oldonload = window.onload; 

	if (typeof window.onload != 'function') { 
	window.onload = func; 
		} else  { window.onload = function() { 	//onload: used to execute a script once a web page has completely loaded all content
			if (oldonload) { 
			oldonload(); 
			}	 
		func(); 
		} 
	;} 
} 

addLoadEvent(function() { 
	swapImage(); 
	});  

HTML:
<div id ="tekst_animacija">........</div>
.................
<div>
<img name="slike_animacija" id="slike_animacija" alt ="slike za animacijo" height="220" width="240"/>	
<img onclick="prev()" title="Nazaj" alt="Nazaj" width="40" height="40" src="slike/odklop_dve.gif">
<img onclick="next()" title="Naprej" alt="Naprej" width="40" height="40" src="slike/odklop_dve.gif">
</div>


Če bo kdo uporabil kodo, vrednost, ki se skriva npr. v image[0] je npr. src='slike/ogenj1.png'


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Enostaven JS noče delati

Oddelek: Izdelava spletišč
6681 (587) techfreak :)
»

JavaScript

Oddelek: Izdelava spletišč
91364 (1209) Gandalfar
»

auto submit forum

Oddelek: Izdelava spletišč
5986 (933) Road Runner
»

Javascript in php

Oddelek: Izdelava spletišč
201877 (1566) rokpok
»

Kako se tole naredi?

Oddelek: Izdelava spletišč
261421 (1121) njok

Več podobnih tem