| | |
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 21.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 Bydlisko: Michalovce |
Nazdarek. Mam urobeny takyto script na "zosvetlovanie" obrazkov :
Kód: function images_expansion(opac) { timer = null; var prm = 0.01; var slidImg = document.getElementById('ImgId');
if (opac <= 1){ opac += prm; slidImg.style.opacity = opac; slidImg.style.MozOpacity = opac; slidImg.style.KhtmlOpacity = opac; slidImg.style.filter = 'alpha(opacity=' + (opac * 100) + ');'; timer = setTimeout("images_expansion(" + opac + ");", 10); } else { return true; } }
Tento script funguje, no problem je ze v IE to trva velmi pomaly. Resp. "zosvetlenie" obrazka trva asi 3x tolko co napr. vo FF. Preto sa chcem opytat, ci sa to da nejako upravit, aby v IE to zobrazovanie nebolo take pomale..
|
|
Registrovaný: 03.01.11 Prihlásený: 21.02.11 Príspevky: 54 Témy: 1 |
pouzi jQuery a animate()
Tam by nemal byt ziaden problem. Tu to dosiahnes jedine podmienkou na IE a upravenim casu toho timeru, lebo v IE je js proste pomalsi
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 28.01.2011 13:20 | |
|
teraz len tak narychlo strelim.
skus zmenit skok po akom sa bude menit priehladnost
Kód: slidImg.style.filter = 'alpha(opacity=' + (opac * 300) + ');';
otazne je co sa stane ked opac * 300 bude vacsie ako 100 ale pravdepodobne nic akurat sa bude aj nadalej zbytocne vykonavat volanie funkcie
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 28.01.2011 13:27 | |
|
prohibit
Si si isty? Lebo ja velmi pochybujem. Jednak preto, ze ta pomalost Explorera sa nema sancu prejavit oproti ostatnym prehliadacom na tak primitivnom skripte, ale najma preto, ze jQuery je takisto len Javascriptova fcia, ktora teda bude pouzivat velmi podobny, ak nie ten isty, postup na "zosvetlenie".
Videl by som to mozno na bitku s nejakym inym skriptom, ktory to spomaluje, pripadne memory leak? Ked sa dostanem k Windowsu, vyskusam to.
|
|
Registrovaný: 21.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 Bydlisko: Michalovce |
No vyskusal som to co radil coldak. Zobrazovanie toho obrazka sa zrychlilo. Problem je akurat v tom, ze pri zachovani ostatnych hodnot, sa to "zobrazovanie" obrazka prejavuje trhane..Presnejsie..Je vidiet, ze sa opakuje ten cyklus. Jednine co ma napada, nejako to upravit pre samotne IE. Ale uprimne..Neviem ako "rozdelit" tu funkciu tak aby sa cast scriptu vykonavala len pre IE..
pre Ďuri:
Citácia: Videl by som to mozno na bitku s nejakym inym skriptom, ktory to spomaluje, pripadne memory leak?
Netvrdim, ze to nie je mozne, no nie som si celkom isty..Totiz tu funkciu setTimeout pouzivam este v inych scriptoch/funkciach (napr. v slideri na zväcsovanie obrazka) a tiez sa to sprava rovnako..teda ze je to pomale..
K tomu memory leak..Ake funkcie, resp. co by mohlo zapricinovat to "zaberanie" pamäte??
|
|
Registrovaný: 03.01.11 Prihlásený: 21.02.11 Príspevky: 54 Témy: 1 |
Ďuri píše: prohibit Si si isty? Lebo ja velmi pochybujem. Jednak preto, ze ta pomalost Explorera sa nema sancu prejavit oproti ostatnym prehliadacom na tak primitivnom skripte, ale najma preto, ze jQuery je takisto len Javascriptova fcia, ktora teda bude pouzivat velmi podobny, ak nie ten isty, postup na "zosvetlenie". Videl by som to mozno na bitku s nejakym inym skriptom, ktory to spomaluje, pripadne memory leak? Ked sa dostanem k Windowsu, vyskusam to. ano, som si isty. JQuery sice je tiez v js, ale robili to ludia co o js vedia podstatne viac nez my vsetci dokopy. Samozrejme, ak chce odladit tento svoj kod, ja mu to spravim. Ale co z toho ze to okopiruje a nebude tomu rozumiet. Tak ked sa objavili pochybnosti aj u teba, ocividne bude dobre objasnit par veci
1) jednoduchy skript? Na zaklade coho si usudil? Ze je tam par riadkov? No dobre, ok, ale tych par riadkov rendruje css co je casovo draha operacia, naraba s timerom s malym intervalom (k tomu sa dostanem neskor ze zalezi aj na intervale), spaja retazce (v parametri do timeru, k tomu sa tiez dostanem). To su vsetko drahe operacie, a staci maly rozdiel v rychlosti interpretera a odrazi sa to v celkovej pomalosti
2) Kód: timer = setTimeout("images_expansion(" + opac + ");", 10); je pre interpreter skutocne odpad. Pred kazdym spustenim funkcie setTimeout tak musi vyhodnotit dany retazec, co znamena realokaciu pamate. Zial v js nie je ziaden stringbuffer, ale riesi sa to refactoringom kodu ( http://www.softwaresecretweapons.com/jspwiki/javascriptstringconcatenation). Efektivnejsie by bolo volat tam anonymnu metodu, teda prepisat to na Kód: timer = setTimeout(function(){ images_expansion(opac); }, 10); cim sa vyhnes akemukolvek spajaniu retazcov 3) Mozes sa vyhnut predavaniu parametrom, a pouzit globalny scope. Je to diskusia na dlho, mozes namietat ze global scope je dosiahnutelny pomalsie (lebo je az "na konci" a najprv sa prehladavaju vsetky ostatne priestory) ale v tomto pripade ti to pomoze prave kvoli timeru kde budeme moct volat funkciu bez parametra. Takze timer aj opac pridu do globalnych premennych 4) uz sme sa refactoringom zbavili spajania retazcu v timeri, aj predavaniu parametra. Teda sa vola vzdy "to iste" a tak kludne vymenime timer za interval. Namiesto setTimer dame funkciu setInterval. Cas dame vyssi, lebo 10ms je prilis malo a po tejto optimalizacii to vo ff skoci behom mihnutia oka. IE zase kvoli reziam okolo celho js ten interval tak ci tak predlzi. Myslim ze tych 50 - 100 by malo stacit, skus sa s tym pohrat. Este male upravy a vysledok: Kód: <html> <head> <script> var opac = 0; var timer = null; function images_expansion() { var prm = 0.01; var slidImg = document.getElementById('ImgId'); if (opac <= 1){ opac += prm; slidImg.style.opacity = opac; slidImg.style.MozOpacity = opac; slidImg.style.KhtmlOpacity = opac; slidImg.style.filter = 'alpha(opacity=' + (opac * 100) + ');'; timer = setInterval(images_expansion,50); } else { clearTimeout(timer); return true; } } </script> <style> #ImgId { opacity: 0; filter:alpha(opacity=0); } </style> </head> <body> <a onclick="images_expansion()">zobraz</a> <div > <img id="ImgId" src="DSC09419.jpg" /> </div> </body> </html> by sa mal spravat na kazdom prehliadaci rovnako (v zmysle rychlosti). Neskusal som to, a IE je crep pri ktorom clovek nikdy nevie a teoria casto zlyhava, ale neverim ze po tejto optimalizacii bude rozdiel stale rovnako badatelny
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 28.01.2011 18:50 | |
|
prohibit píše: Namiesto setTimer dame funkciu setInterval. Cas dame vyssi, lebo 10ms je prilis malo a po tejto optimalizacii to vo ff skoci behom mihnutia oka. IE zase kvoli reziam okolo celho js ten interval tak ci tak predlzi. Toto nie je pravda. Prave fungovanie setIntervalu spociva v tom, ze stanoveny interval (10ms v nasom pripade) sa nikdy nemeni a fcia predana ako argument sa vola opakovane vzdy po 10ms bez ohladu na to, ci predosly beh kodu predaneho ako argument sa uz dokoncil alebo nie. Preto sa pouzivanie intervalov vacsinou vobec neodporuca.
Tvoj kod je cely chybny vzhladom na to, ze pri kazdom zavolani images_expansion() spustis novy interval volania tejto fcie. To znamena, ze po prvych 50ms sa o opacitu uz staraju naraz dva intervaly, po dalsich 50ms uz styri naraz beziace intervaly a tak dalej. Preto niet divu, ze sa obrazok zobrazi raketovou rychlostou, dokonca rychlejsie ako 100*50ms Skus si ho opravit.
Nemal som pravdu s tym, ze v IEcku to pomalsie byt nemoze, je tam rozdiel - na druhej strane ten rozdiel nie je taky velky, ako si pisal; povedal by som, ze na cistom HTML dokumente to nie je take strasne, aby to malo vyznam riesit (a uz duplom nie pri grafickych blbostiach typu plynule zobrazenie obrazku). Ak sa ti naozaj animacia vykonava 3x pomalsie, bude tam urcite viacej veci, ktore sposobuju neprijemnosti. Inak ako pisal prohibit, jQuery toto naozaj riesi.
// pridané po 2 hodinách 35 minútach od posledného príspevku
Este by som dodal, ze ta pomalost IEcka velmi pravdepodobne nesuvisi so ziadnym renderovanim CSS ani pracou s retazcami, kedze cisla cez 1600 (miesto okolo 1000) hadze aj takyto uplne jednoduchy skript:
Kód: var s = (new Date()).getTime(); (function f(i) { if (i >= 100) { alert((new Date()).getTime() - s); return; } setTimeout(function() { f(i + 1); }, 10); })(0); Zrejme to bude teda nejaky bug v Exploreri.
|
|
Registrovaný: 21.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 Bydlisko: Michalovce |
OK..tak ja sem hodim kopletny JS kod..Tak ak mozem poprosit, keby ste sa na to mrkli a povedali mi co by som mal upravit, resp ako to upravit, aby aj to zobrazovanie obrazka v IE fungovalo "normalne".. Este jedna vec..V JS som fakt zaciatocnik, tak ten kod berte trocha s rezervou..Ak ma teda niekto lepsie/jednoduchsie riesenie..sem s nim..ale aj s vysvetlivkami.. Rad sa nieco nove naucim..
Kód: <script> var arrayThumbs, arrayImages, arrayHeights, arrayWidths, arrayInfos, arrayNums, arrLength, picture, PicWidth, ImgAdr;
function images_expansion(opac) {
timer = null; var prm = 0.01;
var slidImg = document.getElementById('ImgId');
if (opac <= 1){
opac += prm;
slidImg.style.opacity = opac; slidImg.style.MozOpacity = opac; slidImg.style.KhtmlOpacity = opac; slidImg.style.filter = 'alpha(opacity=' + (opac * 100) + ');';
timer = setTimeout("images_expansion(" + opac + ");", 10);
} else {
return true; } }
function showThumbs(name, gall, pc) { var uh = name; var gh = gall; var params = "user="+ uh +"&gal=" + gh;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) {
eval(xmlhttp.responseText); arrayThumbs = arrayThumb; arrayImages = arrayImage; arrayHeights = arrayHeight; arrayWidths = arrayWidth; arrayInfos = arrayInfo; arrayNums = arrayNum;
arrLength= arrayThumbs.length ;
picture = new Array(); PicWidth = new Array();
var rarLeng = arrLength -1; for(t=0; t<arrLength; t++) { if (arrayHeights[t] > arrayWidths[t] ) { PicWidth[t] = arrayWidths[t]; if (PicWidth[t] > 600) { PicWidth[t]=600; } else { PicWidth[t]= arrayWidths[t]; } } else { PicWidth[t] = arrayWidths[t]; if (PicWidth[t] > 500) { PicWidth[t]=500; } else { PicWidth[t]= arrayWidths[t]; } }
picture[t] = new Image(); picture[t].src = "thumbnails.php?img=./userimages/"+arrayImages[t]+"&sirka="+PicWidth[t]; if ( picture[t]== picture[rarLeng]) { showImage(pc); }
}
}
}
xmlhttp.open("POST","gallery_images_jx.php",true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.send(params); }
function showImage(nm) { var ImPor = (nm * 1)-1; var MaxWidth = PicWidth[ImPor]; var ImgW = MaxWidth+"px";
changeBorder(ImPor); navImage(nm);
var ImNum ="<img id='ImgId' width='"+ImgW+"' name='"+ImPor+"' src=" +picture[ImPor].src +" alt='"+arrayImages[ImPor]+"' style='opacity: 0.1; -moz-opacity: 0.1; border: 3px solid #ffffff'>";
images_expansion(0);
document.getElementById("image").innerHTML= ImNum ; document.getElementById("por").innerHTML = nm +"/"+ arrLength;
var fotoInfos =arrayInfos[ImPor]; if (fotoInfos =='ziadny') { var fotoInfo="-"; } else { var fotoInfo= arrayInfos[ImPor]; } document.getElementById("imageInfo").innerHTML= fotoInfo ;
}
function changeBorder(br) { var smallImages = document.getElementById("thumbs").getElementsByTagName('img'); for (var i = 0; i < smallImages.length; i++) { var smallImage = smallImages[i]; smallImage.style.borderColor = smallImage.name == br ? '#d7450a' : '#ffffff'; } }
function navImage(Im) { var newImg; if (Im >= 0 && Im < arrLength) { newImg= (Im * 1) + 1; var nextImg="<a href=\"javascript: showImage("+newImg+")\" title='Ďalší obrázok'>Ďalší obrázok » </a>"; document.getElementById("nextImage").innerHTML= nextImg ; } else { document.getElementById("nextImage").innerHTML= "" ; } if (Im > 1 && Im <= arrLength) { newImg= (Im * 1) - 1; var prevImg="<a href=\"javascript: showImage("+newImg+")\" title='Späť obrázok'> « Späť obrázok </a>"; document.getElementById("prevImage").innerHTML= prevImg ; } else { document.getElementById("prevImage").innerHTML= "" ; } }
function navigation(pg) { var cel, im; var ip1 = ( pg * 8) - 8; var ip = ip1 ; var poc = Math.ceil( arrLength / 8); cel=(arrLength * 1)- ip; if (cel > 8) { im= ( ip * 1) + 8; } else { im= (ip * 1) + cel ; }
var thumbN = new Array();
for(i=ip; i<im; i++) { var pIm= i+1; thumbN[i] = "<a href=\"javascript: showImage('"+pIm+"');\"><img name='"+i+"' src=\"thumbnails.php?img=./userthumbs/"+arrayThumbs[i]+"&sirka=70\" alt=\""+arrayImages[i]+"\" title='"+arrayInfos[i]+"' style=\"margin: 3px; border: 2px solid #ffffff;\"> </a>";
} thumbN =thumbN.join(" ");
document.getElementById("thumbs").innerHTML = thumbN; // Navigacia Ďalšie if (pg >=1 && pg < poc) { var arrow1 = "<img src=\"./icons/nextImg.gif\" style=\"margin-top: 20px\" title='Ďalšie náhľady'>" ; var pageN = (pg * 1) + 1; var next ="<a href=\"javascript: navigation("+pageN+");\">"+ arrow1 +"</a>"; }
else { var next =""; }
document.getElementById('navNext').innerHTML = next; // Navigacia Späť if (pg >1 && pg <=poc) { var arrow2 = "<img src=\"./icons/prevImg.gif\" style=\"margin-top: 20px\" title='Späť náhľady'>" ; var pageP = (pg * 1) - 1; var prev ="<a href=\"javascript: navigation("+pageP+");\">"+ arrow2 +"</a>"; } else { var prev =""; }
document.getElementById('navPrev').innerHTML = prev; }
</script>
|
|
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Windows - pomale zobrazovanie ikon po starte v Operačné systémy Microsoft | 9 | 354 | 22.12.2015 11:12 liqua1 | | Pomale zapinanie PC (pomale detekovanie BIOS-u) v Ostatné | 4 | 728 | 15.12.2016 17:23 tatko Tom | | Pomalé bootovanie winu + pomale vypinanie zostavy v Operačné systémy Microsoft | 3 | 568 | 29.09.2010 11:41 Googler1 | | otvorenie obrázka v JavaScript, VBScript, Ajax | 3 | 815 | 10.02.2008 18:30 jablko05 | | POZICIA OBRAZKA v JavaScript, VBScript, Ajax | 2 | 772 | 22.01.2008 12:46 mirec23 | | Zatrasenie obrazka v JavaScript, VBScript, Ajax | 3 | 569 | 22.11.2012 14:37 BX | | otvorenie obrazka v HTML, XHTML, XML, CSS | 2 | 657 | 18.03.2010 18:36 Antuanet | | Zmena obrázka v HTML, XHTML, XML, CSS | 1 | 533 | 04.10.2015 16:06 void | | transformacia obrazka v HTML, XHTML, XML, CSS | 7 | 578 | 29.07.2012 15:07 Ďuri | | preload obrázka v JavaScript, VBScript, Ajax | 2 | 799 | 12.03.2008 10:18 mage | | upload obrazka v PHP, ASP | 16 | 1217 | 10.03.2010 19:03 vputin | | Efekt obrazka v JavaScript, VBScript, Ajax | 8 | 1232 | 20.07.2008 1:14 emer | | Orezanie obrázka v Grafické programy | 3 | 1847 | 31.05.2019 10:41 void | | velkost obrazka v Grafické programy | 3 | 672 | 07.05.2009 17:56 Dudko | | Prekreslenie obrazka v Grafické programy | 2 | 663 | 13.08.2011 15:27 zeto750 | | zmensenie velkosti obrazka v Grafické programy | 10 | 8644 | 02.11.2006 12:59 looser |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|