[BeeHive/JS] scrollIntoView en Anchors

Pagina: 1
Acties:

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
** AL OPGELOST!
**
.
Ik wil op de layer kunnen scrollen net zoals je normaal doet via Anchors;

daar heb ik de volgende functie voor bedacht die maakt gebruik van scrollintoview
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function jumpAnchor(name) {
    d("A: start:"+name);
        if (document.all.tags("A")(name).name==name)    {
            parentElement=document.all.tags("A")(name).parentElement;
            while(!(parentElement.id) || !(parentElement.id.indexOf('text_2') > -1) ) {
                parentElement=parentElement.parentElement;
            }
    d("A: nameDiv1:" + parentElement.id + ":" + parentElement.id.length);

            nameDiv=parentElement.id.substr(0,parentElement.id.length-6);
            prevY=document.dyn[nameDiv + "text"].layer.clientHeight;
    d("A: prevY : " + prevY);
    d("A: nameDiv: "+nameDiv);
            document.all.tags("A")(name).scrollIntoView();
    d("A: Scrolled");
            useBar = document.dbWin[nameDiv].theBar;
            activeBar = useBar;
            alter= 400; // DEZE WAARDE MOET WORDEN BEREKEND.
            useBar.scroller.moveBy(0, alter);
    d("A: move by " + alter);
            dynHandleScroll();
    d("A: ending");

        }
}

functie d: debug text naar scherm.
document.dbWin[nameDiv].theBar; // SCROLLER OBJECT

Oke als ik een waarde invul voor alter werkt de functie perfect!. Maar nu moet ik die waarde dus berekenen. Aangezien ik niet van te voren weet waar het anchor staat.

Normaal kan je dat doen aan de hand van de document.body.scrollTop maar aangezien ik de scrollbars uit heb staan. Worden waardes ook niet gevuld/geupdated.

Hoe kan ik toch de nieuwe en oude waarde gebruiken?

Programmer - an organism that turns coffee into software.


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

je kan de offsetTop van de link zelf meegeven:
code:
1
<a href="javascript://" onclick="alert(this.offsetTop)">test</a>

en dat meesturen om de scroll te berekenen. Ik denk dat je een recursieve dinges moet maken om de volledige verticale offset naar de content layer te krijgen, er zat al gauw iets in de weg dacht ik.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function findPosY(obj)
{
    var curtop = 0;
    if (document.getElementById || document.all)
    {
        while (obj.offsetParent)
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (document.layers)
        curtop += obj.y;
    return curtop;
}

Ik maak nu gebruik van deze functie... om de offset te vinden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function jumpAnchor(name) {
        if (is.NS4 )        {
                return;
        }
        else if (is.NS6)        {
            m= document.getElementByName(name);
        }
        else {
            m= document.all.tags("A")(name);

        }
            parentElement=m.parentElement;
            
            while(!(parentElement.id) || !(parentElement.id.indexOf('text_2') > -1) ) {
                parentElement=parentElement.parentElement;
            }
            alter= findPosY(m);
            nameDiv=parentElement.id.substr(0,parentElement.id.length-6);
            
            useBar = document.dbWin[nameDiv].theBar;
            activeBar = useBar;
            
            useBar.scroller.moveBy(0, alter);
            dynHandleScroll();
        
}

Met NS4 moet ik alle layers gaan door lopen.

edit:
paste error?

Programmer - an organism that turns coffee into software.


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Ik heb ook nog ff gespeeld, en kwam op dit uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<html>
<head>
<style type="text/css">
#content    {
    position:absolute; left:50; top:50; width:320; 
    border-style:solid; border-width:1; padding:2;
}
</style>

<script language="javascript">

function getTop(obj, offset) {
    if(obj.parentElement && obj.id != 'content') {
        getTop(obj.parentElement, offset + obj.offsetTop)
    } else {
        alert(offset || (obj.y || obj.offsetTop))
    }
}

</script>
</head>

<body>

<div id="content">
Hans en grietje liepen in het bos. Plots stond er een huisje
helemaal gemaakt van groenten en fruit. "He bah!", zei Hans,
"Ik lust heel geen groenten".
<br><br>
<a href="javascript://" onclick="getTop(this,0)">Zeg er wat van</a>
</div>

</body>
</html>

alleen loopt het in de soep bij IE als ik een <p> of <p /> gebruik.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin