Forum » Programiranje » [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...
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.
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:
nisem stestiral, tak da možno, da je kje kaka napaka, ampak približno tak bi naj izgledalo.
$(".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
Uncaught SyntaxError: Unexpected token }
To ni ne tč ne mš.
..je že bolje
Lahko tudi kaj takega...
http://jsfiddle.net/QX35V/
$(".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…
- spremenil: alexa-lol ()
baunti ::
haha keri fail pri kopiranju sem naredo :D to sem mislo drugac napisat:
http://jsfiddle.net/QX35V/1/
$(".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:
Tvoji eventi delujejo popolnoma enako.
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
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
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.
onclick="prev() in onclick="next() ne sodelujeta v tej operaciji, sprožita neko drugo akcijo v drugem bloku.
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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Vprašanje glede java kalkulatorjaOddelek: Programiranje | 1184 (883) | techuser |
» | jQuery - proži samo enkratOddelek: Programiranje | 1190 (987) | luksorzi |
» | jQuery loadOddelek: Izdelava spletišč | 1598 (1515) | MrBrdo |
» | Javascript:sprememba/naložitev nove slike v DIVOddelek: Izdelava spletišč | 2670 (2505) | JayKay |
» | javascript ne deluje znotraj novih DIV-ov, ki jih zgenerira AjaxOddelek: Programiranje | 2036 (1766) | frudi |