» »

[jQuery] Zamenjava sličic pri različnih stanjih miške

[jQuery] Zamenjava sličic pri različnih stanjih miške

kornilov ::

Pozdravljeni,
imam sličice, ki se obnašajo kot hiperpovezava. Vsako znamenje horoskopa
ima tri različne sličice, navadno, ko gre miška preko in ob kliku.
Uspelo mi je napisati kodo za vsako znamenje posebej.
Kako bi lahko skrajšal jQuery kodo??
Poti do slike se razlikujejo samo v imenu in v številki:
oven2, oven1, oven3...
<a href="oven.php"><img class="znamenja" id="oven" src="slike_roll/oven1.png" alt=""></a>
<a href="bik.php"><img class="znamenja" id="bik" src="slike_roll/bik1.png" alt=""></a>
...
se nadaljuje


<script>
$(document).ready(function() {
	$("#oven").ready(function () {
		$("#oven")
		    .mouseover(function () {
		        $(this).attr("src", "slike_roll/oven2.png");
		    })
		    .mouseout(function () {
		        $(this).attr("src", "slike_roll/oven1.png");
		    });
		$("#oven").mousedown(function(){
			$(this).attr("src", "slike_roll/oven3.png");
		    });	
		});	 
		
	$("#bik").ready(function () {
		$("#bik")
		    .mouseover(function () {
		        $(this).attr("src", "slike_roll/bik2.png");
		    })
		    .mouseout(function () {
		        $(this).attr("src", "slike_roll/bik1.png");
		    });
		$("#bik").mousedown(function(){
			$(this).attr("src", "slike_roll/bik3.png");
		    });	
		});	 
});
...
se nadaljuje
</script>

stb ::

Gre tudi brez javascripta s CSS :hover in :active selectorjema.

Pa vsaj različne sličice za vsak gumb slepi skupaj v eno slikovno datoteko in jo uporabi kot CSS sprite, da ne bo slike začelo nalagati šele ko uporabnik klikne na link oz zapelje miško nadenj. Lahko greš še korak dalje in sličice za vseh 12 znamenj združiš v eno datoteko.

baunti ::

Če hočeš imet narejeno z jqueryjem bi naj nekak tak zgledalo:

$(".znamenja")
    $(this).mouseover(function () {
        var path="slike_roll/"+$(this).attr("id");
	$(this).attr("src", path+"2.png");
    });
    $(this).mouseout(function () {
        var path="slike_roll/"+$(this).attr("id");
        $(this).attr("src", path+"1.png");
    });
    $(this).mousedown(function(){
        var path="slike_roll/"+$(this).attr("id");
        $(this).attr("src", path+"3.png");
    }); 
});  


nisem stestiral, tak da možno, da je kje kaka napaka, ampak približno tak bi naj izgledalo.

Zgodovina sprememb…

  • spremenilo: baunti ()

alexa-lol ::

napak je že v prvi vrstici
$(".znamenja")
    $(this).mouseover(function () {

Uncaught SyntaxError: Unexpected token }

To ni ne tč ne mš.

$('.znamenje').each(function(){
...
});


..je že bolje

Lahko tudi kaj takega...
$(document).on('click mouseenter mouseleave', '.test', function(e){
    $('body').append('<p>' + e.type + '</p>');
    
    switch(e.type){
        case 'click': alert('click'); break;
        default: alert('other');
    };
});

http://jsfiddle.net/QX35V/

Zgodovina sprememb…

baunti ::

haha keri fail pri kopiranju sem naredo :D to sem mislo drugac napisat:

    $(".znamenja").mouseover(function () {
        var path="slike_roll/"+$(this).attr("id");
        $(this).attr("src", path+"2.png");
    });
    $(".znamenja").mouseout(function () {
        var path="slike_roll/"+$(this).attr("id");
        $(this).attr("src", path+"1.png");
    });
    $(".znamenja").mousedown(function(){
        var path="slike_roll/"+$(this).attr("id");
        $(this).attr("src", path+"3.png");
    }); 


http://jsfiddle.net/QX35V/1/

Zgodovina sprememb…

  • spremenilo: baunti ()

kornilov ::

Hvala @stb. ;)

Hvala @baunti. He, he, sem se tudi jaz zmotil pri kopiranju
sem najprej preizkušal tvoj napačen primer. Drugače deluje brezhibno. :)

Hvala alexa-lol.
Pri tvojem predlogu sem najbolj vihal obrvi.
Da je delovalo, sem ga spremenil takole:
$(document).ready(function(){
	$('.znamenja').on('mouseover mouseout mousedown', function(e) {
	    switch(e.type) {
	        case "mouseover": $(this).attr("src", "slike_roll/" + $(this).attr("id") + "2.png"); break;
	        case "mouseout": $(this).attr("src", "slike_roll/" + $(this).attr("id") + "1.png"); break;
	        default: $(this).attr("src", "slike_roll/" + $(this).attr("id") + "3.png"); break;
	    }
	});
});


Tvoji eventi delujejo popolnoma enako. ;)

alexa-lol ::

fora pristopa $(document).on('click', ...); je ravno to da ni potrebe da element ki ga opisuje selektor ob času izvedbe kode obstaja, zato ga lahko daš ven iz .ready()

Primer: http://jsfiddle.net/ff374/
Če klikneš enega izmed prvih dveh "bambijev" se izvedeta oba alerta, če z klikom na "Klik" dodaš še 5 "bambijev" potem se za teh naslednjih 5 "bambijev" izvede le drugi alert, ker ob času izvedbe .click() še niso obstajali

BigWhale ::

A je kaksna platforma kjer CSS resitev ne deluje za tole?

alexa-lol ::

Dejansko IE 6 in 5.5
http://caniuse.com/css-sel2

BigWhale ::

Ja, v Netscape Navigatorju tud ne dela. Pa kaj? :>

Arto ::

To se dela s CSS, ne tega z jQuery pisat, ker je res brezveze. Še najboljš je, da narediš background slikce in jih potem samo premikaš ob :hover in :active (poglej si http://css-tricks.com/css-sprites/).

kornilov ::

Hvala @Arto. ;)

Imam še eno zadevo. Imam dva gumba, kjer se slika prikaže, če gre miška preko, izven in ob kliku.
Kako bi lahko naredil, da se ob primeru klika slika zamenja za 1 sekundo ("3.png"), potem pa samodejno skoči nazaj na sliko ("1.png")?? Poskušal sem z delay in animate, a mi ni uspelo narediti nič pametnega. 8-O
onclick="prev() in onclick="next() ne sodelujeta v tej operaciji, sprožita neko drugo akcijo v drugem bloku.
	<span><img class="vratolom" onclick="prev()" src="slike/vratolom1.png" alt=""></span>
	<span><img class="supervus" onclick="next()" src="slike/supervus1.png" alt=""></span>

	$('.vratolom, .supervus').on('mouseover mouseout click', function(e) {
	    switch(e.type) {												
	        case "mouseover": $(this).attr("src", "slike/" + $(this).attr("class") + "2.png"); break;	// this.attr: vratolom ali supervus 
	        case "mouseout": $(this).attr("src", "slike/" + $(this).attr("class") + "1.png"); break;
	        case "click": $(this).attr("src", "slike/" + $(this).attr("class") + "3.png"); break;
	    }
	});

Zgodovina sprememb…

  • spremenilo: kornilov ()


Vredno ogleda ...

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

Vprašanje glede java kalkulatorja

Oddelek: Programiranje
61055 (754) techuser
»

jQuery - proži samo enkrat

Oddelek: Programiranje
71068 (865) luksorzi
»

jQuery load

Oddelek: Izdelava spletišč
61454 (1371) MrBrdo
»

Javascript:sprememba/naložitev nove slike v DIV

Oddelek: Izdelava spletišč
142542 (2377) JayKay
»

javascript ne deluje znotraj novih DIV-ov, ki jih zgenerira Ajax

Oddelek: Programiranje
101923 (1653) frudi

Več podobnih tem