Autor Zpráva
Jan Vonka
Profil
Dobrý den,

mám problém s IEčkem a vlastně i s operou, používám jQuery 1.7.2 a mám udělaný script:

function vcenter(objekt, mHeight, mWidth, odsazeni)
{
    width = objekt.style.width? objekt.style.width.replace("px","")*1: objekt.offsetWidth;
    height = objekt.style.height? objekt.style.height.replace("px","")*1: objekt.offsetHeight;

    mPomner = mHeight/mWidth;
    pomner = height/width;

    if(mPomner > pomner)
    {
        zmenseni = mWidth/width;
    }
    else
    {
        zmenseni = mHeight/height;        
    }

    objekt.style.width = (zmenseni*width)+"px";
    objekt.style.height = (zmenseni*width)*pomner+"px";
    if(odsazeni == 1)
    {
        objekt.style.top = (mHeight-(zmenseni*width)*pomner)/2+"px";
    }
}

$(function(){
    $('.vcenter').load(function(){
        vcenter(this, '64', '91', 1);
    });
});
v GCH FF Safari to funguje na pohodu, prostě se tam ten script spustí, v IE a opeře nic, a ani to nehází chybu... pokud použiji event ready tak to nefunguje (není ještě načtený obrázek a menůžou se z měj načíst parametry... (pravdě podobě) když jsem tam na zkoušku dal click tak to fungovalo, takže chyba není v té funkci vcenter...
díky za každou radu ;)
_es
Profil
Jan Vonka:
Časté potíže, zajímavosti a poučné debaty » Používejte var
$('.vcenter') je element obrázka?
Udalosť onload môže vzniknúť skôr, než ju nastavíš. Spoľahlivý spôsob jej nastavenia je v HTML kóde obrázku zadať atribút onload.
Argumenty funkcie mHeight a mWidth majú snáď byť čísla - prečo funkcii posielaš textové reťazce?
Jan Vonka
Profil
ano .vcenter je <img>
onload, vím a teďka to mám jako doufám dočasné řešení, zaprvé se mi to moc nelíbí (ale to by bylo fuk) a za druhé pokud bych dělal nějakou změnu musel bych to všude přepisovat, takhle by to stačilo v tom jQuery...
přepsal jsem to na
function vcenter(objekt, mHeight, mWidth, odsazeni)
{
    var width, height, mPomner, pomner, zmenseni
    width = objekt.style.width? objekt.style.width.replace("px","")*1: objekt.offsetWidth;
    height = objekt.style.height? objekt.style.height.replace("px","")*1: objekt.offsetHeight;

    mPomner = mHeight/mWidth;
    pomner = height/width;

    if(mPomner > pomner)
    {
        zmenseni = mWidth/width;
    }
    else
    {
        zmenseni = mHeight/height;        
    }

    objekt.style.width = (zmenseni*width)+"px";
    objekt.style.height = (zmenseni*width)*pomner+"px";
    if(odsazeni == 1)
    {
        objekt.style.top = (mHeight-(zmenseni*width)*pomner)/2+"px";
    }
}

$(function(){
    $('.vcenter').load(function(){
        vcenter(this, 64, 91, 1);
    });
});

a výsledek stále stejný... :/
_es
Profil
Jan Vonka:
a výsledek stále stejný... :/
A čo som ti radil:
<img onload="vcenter(this, 64, 91, 1)" ...
si skúšal?
Aký je účel toho skriptu?
Jan Vonka
Profil
jo jo tak to funguje, ale jak říkám, je to na spoustě míst a kdyby se to upravovalo tak je to složité... ale asi to tak budu muset nechat...
_es
Profil
Jan Vonka:
A čo ten skript robí?
Mám podozrenie, že niečo, čo by sa cez JS robiť nemalo.
Jan Vonka
Profil
je to vertikální centrování obrázků, podle mého to je nejpřesnější a nejspolehlivější...
_es
Profil
Jan Vonka:
No a prečo to „vertikálne centrovanie“ nespravíš normálne priamo v CSS?
Prečo meníš rozmery obrázka? - Nedá sa spoľahnúť na to, akým spôsobom rôzne prehliadače obrázok zmenšia či zväčšia.
Jan Vonka
Profil
no ještě jsem nepřišel na způsob jak to udělat aby to bylo 100% funkční a zárověň přesný (například když použiji tabulku tak je to posunutý o cca 1px)
rozměry měním protože se tem obrázek musí přizpůsobit (do rámečku)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: