Doporučujeme: Levný PHP webhosting | Webhosting zdarma | PHP hosting od 23 Kč | Italo.cz | Nejlevnější domény | TV program | Zkracovač dlouhých adres

Můj blog – až 10 % špičkového kódu navíc!

Náhledy (nejen) obrázků v javascriptu

Datum: 26. 3. 2007 21.00 | Autor: Lukáš | 1733× | Kategorie: Javascript | Komentáře: 15

Jelikož současný stav zvětšování fotek v profilech uživatelů a náhledů na Megaupload.cz neodpovídal mým představám, využil jsem toho, že jsem nemocný a mám trochu víc času a nálady. Zároveň jsem se rozhodl podělit o nabyté vědomosti :). Mé řešení samozřejmě počítá s tím, že někteří uživatelé (lehce přes 1 %) mají vypnutý javascript.

 

Konec okecávání a jdeme na to:

Tak tedy, máme nějaký obrázek, který cheme zvětšovat. Nastavíme mu nějaké id (v mém případě obrazek) a atributu onclick nastavíme funkce, které si ukážeme vzápětí.

<a onclick="ZobrazFotku(event, 'obrazek.jpg');return false" id='obrazek' href='obrazek.jpg'>
<img src='/nahled/obrazek.jpg' alt='Náhled obrázku' />

</a>

Dále je třeba vytvořit nějaký skrytý div, který se odkryje až na pokyn javascriptu a ve kterém se zobrazí fotka.

<div id='velky-obrazek'>
<a href='#' onclick="Schovat('velky-obrazek')" title='Zavřít'>Zavřít</a><br /><br />
<img src='' id='velkyobrazek' alt='klikni pro zmenšení fotky' onclick="Schovat('velky-obrazek')" style='cursor: pointer' />

</div>

Skryjeme jej CSS stylem:

#velky-obrazek {
	display: none;
	border: 1px solid #000000;
	background-color: #eeeeee;
	padding: 5px;
	position: absolute;
	text-align: right;
}

A nakonec samotný javascript:


/* tato funkce slouží pro samotné zobrazení fotky */
function ZobrazFotku(ev, adresa)
{

/* nastavíme proměnné */
var fotka=document.getElementById('velky-obrazek');
var fotka1=document.getElementById('velkyobrazek');


/* zjistíme, kde přesně uživatel kliknul na obrázek (chcete-li, aby se velký obrázek zobrazil přes celou stránku, tuto podmínku vynechte) */

    if(document.getElementById)
      {

       if (document.all && !window.opera) {
          x = event.clientX + document.body.scrollLeft;
          y = event.clientY + document.body.scrollTop + 30;  
        }  
        else {
          x = ev.pageX;
          y = ev.pageY;
         }
        if (document.all && !window.opera) {
          fotka.style.pixelLeft = x;
          fotka.style.pixelTop = y;
         }
         else {
          fotka.style.left = x + 'px';
          fotka.style.top = y + 'px';
         }
        

      }


/* odkryjeme skrytý div a u obrázku nastavíme atributu src adresu obrázku */
	fotka.style.display = 'block';
	fotka1.src = 'http://nejakaadresa.cz/images/' + adresa;



}


/* a nakonec funkce pro skrytí velkého obrázku */
function Schovat(div){
            document.getElementById(div).style.display='none';
}

A jak to bude výsledně vypadat? Omrkněte profily s fotkami na Profil.vsevjednom.cz nebo nahrajte nějaký obrázek na Megaupload.cz. V odkrytém divu lze obrázek nahradit v podstatě čímkoliv:
Vsevjednom.cz - služby pro Váš web

To je vše. Hodně štěstí ;).




Komentáře:

  1. tobik13. 4. 2007 20.44

    Ok funguje to. Jenom mi prijde trochu nestastna volba nazvu promennych... velkyobrazek a velky-obrazek...kdo se v tom ma vyznat ;)



    odpovědět | Odpovědi: Lukáš [2], Lukáš [8],
  2. Lukáš13. 4. 2007 21.54

    Odpověď pro tobik [1]: Když sjem to psal, tak mě nic jiného zrovna nenapadalo.

    "kdo se v tom ma vyznat"
    A kdo říká, že si to nemůžeš změnit?



    odpovědět
  3. tobik14. 4. 2007 11.01

    Ne, o to vůbec nejde. Samozřejmě, že si to potom změním. Spíš jsem v první chvíli měl problémy se zorientovat, kde je co. Ale hlavně že to funguje ;-)



    odpovědět | Odpovědi: Lukáš [4],
  4. Lukáš14. 4. 2007 11.18

    Odpověď pro tobik [3]: Dobře, upravím to.



    odpovědět
  5. man14. 9. 2007 15.36

    ahoj,
    nechapu za 1. onclick=\"Schovat('velky-obrazek')\" (ty uvozovky - kdyz je tam mam, nefunguje mi to, po odstraneni to bezi)...
    a dale pak <a onclick="ZobrazFotku(event, 'obrazek.jpg');return false" id='obrazek' href='obrazek.jpg'> (proc je tam dvakrat adresa na obrazek.jpg? nebo spis proc je tam jeste ten href='obrazek.jpg', kdyz uz je to v tom onclick).
    diky za odpoved, mk



    odpovědět
  6. Lukáš14. 9. 2007 16.03

    1. Zpětná lomítka jsem zapomněl umazat, byla tam kvůli php.
    2. Je to tam pro ty, co mají vypnutý javascript.



    odpovědět
  7. man14. 9. 2007 16.36

    chapu, diky moc za vysvetleni.
    napada me ale jeste jedna otazka. kdyz budu chtit pouzit toto u vic obrazku, funguje to, ale kdyz budu chtit ke kazdemu obrazku napsat jiny text (tedy do <div id='velky-obrazek'>...</div>, pak se mi u kazdeho nahledu zobrazuje spravny obrazek, avsak porad ten samy text)

    diky za radu...



    odpovědět
  8. Lukáš14. 9. 2007 16.49

    Musíte si udělat víc divů. Třeba obrazekOdpověď pro [0]: , obrazekOdpověď pro tobik [1]: atd. Pak je tedy třeba ještě předávat id toho elementu do té javascriptové funkce.



    odpovědět
  9. man14. 9. 2007 17.10

    to jsi ten cely skript vytvoril sam? nemylim se, kdyz rikam, ze jsi cerstvy maturant? :)
    nenasel jsem na tvym blogu zadny kontakt na tebe, mozna je to schvalne ;)



    odpovědět
  10. Lukáš14. 9. 2007 21.43

    Jo, vytvořil, protože jsem to potřeboval na svoje weby ;). Čerstvý maturant jsem. Kontakt tu opravdu není schválně; při malé trošce snahy ho ale lze dohledat.



    odpovědět
  11. man22. 9. 2007 17.48

    web delam v Opere, vzdycky mi vsechno pak fungovalo i v IE, ale ted sem teda narazil a nevim, jak to osetrit pro IE.
    pomoci tveho javascriptu otevru vetsi obrazek a pod nim je text, avsak v IE je kazde slovo zmineneho textu na samostatnem radku, jako bych napsal za kazdym slovem <br />...nechapu, pokud mate nekdo stejny problem nebo mi radi pomuzete, zde je ukazka http://drevenehrackykubu.ic.cz/?pg=c01 (funguji mi prvni 4 nahledy na obrazky)
    diky moc!



    odpovědět
  12. Lukáš22. 9. 2007 19.10

    Jojo, ten problém jsem řešil a vyřešil. V CSS nastav: _width: 100%;



    odpovědět
  13. man24. 9. 2007 10.40

    promin, ale po pridani _width: 100%; do css stylu #velky-obrazek {...} mi to dela v IE porad to samy (kazdy slovo na jednom radku) a navic je to zarovnany LEFT a ne RIGHT jak je v css stylu #velky-obrazek.
    nema IE spis problem s display: none?
    diky



    odpovědět
  14. Lukáš29. 10. 2007 23.47

    Tady je styl, kterej používám:

    #velka-fotka {
    display: none;
    border: 1px solid #000000;
    background-color: #eeeeee;
    padding: 5px;
    position: absolute;
    text-align: left;
    _width: 100%;
    }



    odpovědět
  15. c:\a.p.LAN_[cz]23. 5. 2008 0.11

    zdary, trochu jsem preupravil ten tvuj vytvor k obrazu svymu, ale mam problem se zobrazovanim v IE. Vetsina prohlizecu to zkousne tak jak ma (FireFox, Opera, Netscape), ale v IE se furt zobrazuje nahled obrazku se 100% sirkou (alespon podle meho) - vubec nekopiruje sirku obrazku. poradil by mi nekdo? kdyztak sem davam link k webu: http://www.babka.cz/katapult.cz - zkus si rozklepnout nejaky image v IE. za pripadnou pomoc bych byl vdecny...



    odpovědět

Přidat nový komentář:




Ochrana proti spamu. Napište prosím číslici pět:
Zaškrtněte prosím tuto kolonku: