Autor Zpráva
Dancek
Profil *
Dobrý den,

mám problém při vykonání funkce v nově otevřeném okně pomocí funkce window.open.

Problém je následující. Po kliknutí na obrázek by se mělo otevřít nové okno do, kterého by se měl zapsat odkaz na javascript
<script src="admin/aspect_ratio.js" type="text/javascript" charset="utf-8"></script>
a tabulka s obrázky. Obrázky spouští funkci přes onLoad. Funkce má za úkol zmenšit obrázek do požadovaného rozměru a zachovat poměr stran obrázku. (nemohu použít pevnou výšku nebo šířku vzhledem k tomu, že se do fotogalerie nahrávají obrázky různých velikostí). Ve firefoxu vše funguje perfektně, v IE je to už horší, pokud je obrázek umístění v
<table><tr><td><img ...></td></tr></table>
tak se nezmenší a zůstane veliký.

funkce pro otevření nového okna s obrázkem:

<img onClick="start_up('core/435666.jpg,core/952833.jpg,core/759378.jpg,core/123200.jpg','500;535,1024;768,1024;768,1024;768','core/435666.jpg');" class="xsmall" src="core/435666.jpg" alt="core/435666.jpg" border="0" onLoad="aspect_ratio(this,'big');">

function start_up(paths,resolution,now){
w = window.open('','Fotogalery','height=500px, width=500px, scrollbars=no, resizable=no');
w.document.close();
w.document.write('<html>');
w.document.write('<head>');
w.document.write('<link rel="stylesheet" href="admin/style.css" type="text/css">');
w.document.write('<script src="admin/aspect_ratio.js" type="text/javascript" charset="utf-8"></script>');
w.document.write('</head>');
w.document.write('<body>');
w.document.write('<center>');
w.document.write('<img src="'+now+'" style="visibility: hidden;" onLoad="aspect_ratio(this,\'gal_small\');">');
w.document.write('<table border="1" width="300px;">');
w.document.write('<tr>');
w.document.write('<td>');
w.document.write('<img src="'+now+'" style="visibility: hidden;" onLoad="aspect_ratio(this,\'gal_small\');">');
w.document.write('</td>');
w.document.write('</tr>');
w.document.write('<tr>');
w.document.write('<td>');
w.document.write('<img src="'+now+'" style="visibility: hidden;" onLoad="aspect_ratio(this,\'gal_small\');">');
w.document.write('</td>');
w.document.write('</tr>');
w.document.write('</table>');
w.document.write('</center>');
w.document.write('</body>');
w.document.write('</html>');}


funkce pro změnšení obrázků:
/*aspect ratio*/
function aspect_ratio(image, size){
if(size == 'small'){var get_width = 128; var get_height = 96;}
else if(size == 'xsmall'){var get_width = 42; var get_height = 32;}
else if(size == 'big'){var get_width = 170; var get_height = 170;}
else if(size == 'gal_big'){var get_width = 400; var get_height = 250;}
else if(size == 'gal_small'){var get_width = 100; var get_height = 100;}
else{return false;}
var aspect_ratio_w = image.offsetWidth/image.offsetHeight;
var aspect_ratio_h = image.offsetHeight/image.offsetWidth;
if(image.height > get_height){
image.height = get_height;
image.width = get_height/aspect_ratio_h;
image.style.visibility='visible';}
else{null;}
if(image.width > get_width){
image.width = get_width;
image.height = get_width/aspect_ratio_w;
image.style.visibility='visible';}
else{null;}}


V případě, že by někoho napadlo se mě ptát proč jsem použil tolikrát w.document.write(*) tak důvodem je pouze lepší orientace při psaní v PSPadu. (při zápisu pouze s jedním w.document.write(*) se problém nevyřešil)

IE ani firefox mi nehlásí žádnou chybu v javascriptu.

Praktická ukázka je zde:
http://shop.matraux.com/?prid=879967
_es
Profil
Dancek:
Funkce má za úkol zmenšit obrázek do požadovaného rozměru a zachovat poměr stran obrázku.
Na to by malo stačiť nastavovať len šírku (alebo len výšku), netreba nastavovať oba rozmery.

w.document.close(); patrí až za posledné použitie metódy write.
Dancek
Profil *
Na to by malo stačiť nastavovať len šírku (alebo len výšku), netreba nastavovať oba rozmery.

Určitě nestačilo. Jakmile uživatel nahraje obrázek o výšce třeba 800px tabulka se pak natáhne (což nechci), případně pokud bude obrázek 800px vysoký a 100px široký tak by se taky mohlo stát že při nastavené pevné velikosti např. 200px šířka by se obrázek natáhl na 1600px na výšku a 200px na šířku.

w.document.close(); patrí až za posledné použitie metódy write.
děkuju za radu, opravil jsem si to hned =) nicméně to neřeší problém v IE.
_es
Profil
Dancek:
Nerozumiem, na čo sú tam použité vlastnosti offsetWidth a offsetHeight, to môže robiť problémy.
Predsa úplne stačia vlastnosti width a height.
Dancek
Profil *
var aspect_ratio_w = image.offsetWidth/image.offsetHeight;
var aspect_ratio_h = image.offsetHeight/image.offsetWidth;


změněno na:

var aspect_ratio_w = image.width/image.height;
var aspect_ratio_h = image.height/image.width;


Bohužel to ale neřeší problém v IE.

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: