Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok NapísalOffline : 28.01.2011 11:59

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..


Offline

Užívateľ
Užívateľ
Pomalé zobrazovanie obrázka v IE

Registrovaný: 03.01.11
Prihlásený: 21.02.11
Príspevky: 54
Témy: 1
Príspevok NapísalOffline : 28.01.2011 12:38

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 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


Offline

Čestný člen
Čestný člen
Pomalé zobrazovanie obrázka v IE

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 28.01.2011 14:05

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??


Offline

Užívateľ
Užívateľ
Pomalé zobrazovanie obrázka v IE

Registrovaný: 03.01.11
Prihlásený: 21.02.11
Príspevky: 54
Témy: 1
Príspevok NapísalOffline : 28.01.2011 14:58

Ď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


Offline

Čestný člen
Čestný člen
Pomalé zobrazovanie obrázka v IE

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 29.01.2011 12:24

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 &raquo; </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'> &laquo; 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>


Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Windows - pomale zobrazovanie ikon po starte

v Operačné systémy Microsoft

9

354

22.12.2015 11:12

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomale zapinanie PC (pomale detekovanie BIOS-u)

v Ostatné

4

728

15.12.2016 17:23

tatko Tom Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomalé bootovanie winu + pomale vypinanie zostavy

v Operačné systémy Microsoft

3

568

29.09.2010 11:41

Googler1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. otvorenie obrázka

v JavaScript, VBScript, Ajax

3

815

10.02.2008 18:30

jablko05 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. POZICIA OBRAZKA

v JavaScript, VBScript, Ajax

2

772

22.01.2008 12:46

mirec23 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zatrasenie obrazka

v JavaScript, VBScript, Ajax

3

569

22.11.2012 14:37

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. otvorenie obrazka

v HTML, XHTML, XML, CSS

2

657

18.03.2010 18:36

Antuanet Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zmena obrázka

v HTML, XHTML, XML, CSS

1

533

04.10.2015 16:06

void Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. transformacia obrazka

v HTML, XHTML, XML, CSS

7

578

29.07.2012 15:07

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. preload obrázka

v JavaScript, VBScript, Ajax

2

799

12.03.2008 10:18

mage Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. upload obrazka

v PHP, ASP

16

1217

10.03.2010 19:03

vputin Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Efekt obrazka

v JavaScript, VBScript, Ajax

8

1232

20.07.2008 1:14

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Orezanie obrázka

v Grafické programy

3

1847

31.05.2019 10:41

void Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. velkost obrazka

v Grafické programy

3

672

07.05.2009 17:56

Dudko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prekreslenie obrazka

v Grafické programy

2

663

13.08.2011 15:27

zeto750 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zmensenie velkosti obrazka

v Grafické programy

10

8644

02.11.2006 12:59

looser Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra