Avatar billede jamiros Novice
27. august 2004 - 15:35 Der er 6 kommentarer og
1 løsning

onclick problem med scroll

Hej eksperter
Jeg har det her lille javascript som scroller fra en anden frame.
Men problemet er at når man klikker lidt for ivrigt scroller den modsatte retning end tænkt. Hvad kan jeg gøre?

Pft. :-)

script--------------------------------------------------

var vScroll = 0;
function vscrollLoop( ) {
    parent.main.scrollBy( 0, vScroll );
    if ( vScroll != 0 ) setTimeout( "vscrollLoop()", 50 );
}; //end vscrollLoop

op-------------------------------------------------------

<a href="#"  onfocus="this.blur( )" onMouseOver="ms('img2', 'on');vScroll=-3;vscrollLoop();" onMouseOut="ms('img2', 'off');vScroll=0;" onMouseDown="ms('img2', 'ned');vScroll-=8" onMouseUp="ms('img2', 'on');vScroll+=8" onClick="return false;"><img name="img2" src="../grafik/op1.gif" alt="" width="14" height="14" border="0"></a>

ned----------------------------------------------

<a href="#"  onfocus="this.blur( )" onMouseOver="ms('img1', 'on');vScroll=3;vscrollLoop();" onMouseOut="ms('img1', 'off');vScroll=0;" onMouseDown="ms('img1', 'ned');vScroll+=8" onMouseUp="ms('img1', 'on');vScroll-=8" onClick="return false;"><img name="img1" src="../grafik/ned1.gif" alt="" width="14" height="14" border="0"></a>
Avatar billede olebole Juniormester
30. august 2004 - 18:24 #1
<ole>

Mon ikke det ville hjælpe, hvis du reset'er timeren i begyndelsen af funktionen:

var vScroll = 0;
var myTimer = false;
function vscrollLoop( ) {
    if (myTimer) clearTimeout(myTimer);
    parent.main.scrollBy( 0, vScroll );
    if ( vScroll != 0 ) myTimer = setTimeout( "vscrollLoop()", 50 );
}; //end vscrollLoop


/mvh
</bole>
Avatar billede jamiros Novice
31. august 2004 - 19:17 #2
--> olebole
Desværre, det var ikke det der skulle gøre forskellen.
Den scroller stadig ivrigt den forkerte vej ved flere klik hurtigt efter hinanden.
Avatar billede olebole Juniormester
01. september 2004 - 00:41 #3
Hmmm ... man kunne jo prøve at ændre lidt på, hvordan tingene bliver gjort. Prøv at se, om det ikke hjælper at skrive:

var frMove = 0;
var myTimer = false;
function myScroll(imName, imSrc, frMove) {
    if (myTimer) clearInterval(myTimer);
    if (frMove != 0) myTimer = setInterval("doScroll(" + frMove + ")", 50);
    ms(imName, imSrc);
}
function doScroll(frMove) {
    parent.main.scrollBy( 0, frMove );
}

... og så kald med:

<a href="#" onmouseover="myScroll('img2', 'on', -3)"
            onmouseout="myScroll('img2', 'off', 0)"
            onmousedown="myScroll('img2', 'ned', -8)"
            onmouseup="myScroll('img2', 'on', -3)"
            onclick="return false"
            onfocus="this.blur()"
><img name="img2" src="../grafik/op1.gif" alt="" width="14" height="14" border="0"></a>

Det andet link skulle du nok selv kunne skrive  ;o)
/mvh
Avatar billede olebole Juniormester
01. september 2004 - 00:55 #4
Du kunne lave en lille aflastnig, da det at scrolle en (i)frame i forvejen er en tung øvelse:

var myFrame;
var frMove = 0;
var myTimer = false;
function myScroll(imName, imSrc, frMove) {
    if (myTimer) clearInterval(myTimer);
        if (frMove != 0) {
            myFrame = parent.main;
            myTimer = setInterval("doScroll(" + frMove + ")", 50);
        }
    ms(imName, imSrc);
}
function doScroll(frMove) {
    myFrame.scrollBy( 0, frMove );
}

Nu laver vi kun referencen til frame'en, hvergang myScroll kaldes og der faktisk skal scrolles. Derefter genbruges denne reference, hvergang timeren kalder doScroll - og det sker _betydeligt_ oftere.
Du kunne også nøjes med at sætte referencen én gang - på onload event'en. På den anden side tror jeg ikke, du vil kunne mærke forskel på, om du flytter sætningen derhen.
Avatar billede olebole Juniormester
01. september 2004 - 00:57 #5
var myFrame = false;
var frMove = 0;
var myTimer = false;
function myScroll(imName, imSrc, frMove) {
    if (myTimer) clearInterval(myTimer);
        if (frMove != 0) {
            if (!myFrame) myFrame = parent.main;
            myTimer = setInterval("doScroll(" + frMove + ")", 50);
        }
    ms(imName, imSrc);
}
function doScroll(frMove) {
    myFrame.scrollBy( 0, frMove );
}

Så sættes referencen også kun én gang  ;o)
Avatar billede jamiros Novice
01. september 2004 - 18:45 #6
Faaaaaantastic, vi takker :-)
Avatar billede olebole Juniormester
02. september 2004 - 01:24 #7
Selvtak ... så smider jeg et svar  :)

PS: Da vi jo altid sender 'frMove' med som argument, er der ingen grund til at deklarere den globalt. Du kan med andre ord slette linien:
  var frMove = 0;
i toppen. Lad os endelig slanke det globale variabel-scope så meget som muligt  :)
/mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester