Relativer Javascript Scroller

BtheBeast

Mitglied
He Leute, ich versuche gerade in meiner Hp ein Div zu scrollen (mit 2 pfeilen an der seite, nicht mit der scrollbar).

Ich habe das hier versucht: http://www.dhtmlcentral.com/script/script.asp?id=4
nur leider geht das anscheinend nur wenn die position auf absolut gesetzt ist!
Könnt ihr mir sagen ob das auch mit relative geht, weil sonst is mein Layout ja nicht mehr funktionstüchtig!

Danke schonmal!

Gruß B
 
jo das is ja bei diesem auch so... aber (nennt mich bescheuert) aber auch wenn ich nen relativen div block hab und da drin ein absoluten div, orientiert der sich net trotzdem an den Seiten des Browsers?

Gruß B
 
Nein, die absoluten Positionsangaben innerhalb eines relativ positionierten Elements verhalten sich darin "relativ", also orientiert sich hier die absolute Positionierung des Nachfolgeelements #content nicht an den Grenzen des Viewports, sondern an denen seines Elternelements:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><title>Scrollbarer Layer</title><meta name="AUTHOR" content="con-f-use@gmx.net" /><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript"><!--
        //coded by con-f-use@gmx.net - be fair and do not remove this

        function scrollDiv(strId,intSpd) {
                if ( objScrll=document.getElementById(strId) ) {
                        var top = parseInt(objScrll.style.top);
                        if ( (intSpd>0) ? (top<0) : (top>parseInt(objScrll.parentNode.style.height)-objScrll.offsetHeight) )
                                objScrll.style.top = (top + intSpd) +"px";
                        eval( 'tvar' + strId +'= setTimeout("scrollDiv(\''+ strId +'\',' + intSpd + ')",50)' );
                        if (objSelf=scrollDiv.arguments[2])
                                objSelf.onmouseup = objSelf.onmouseout = new Function('fx','clearTimeout(tvar' + strId + ')');
                }
        }
//--></script>

</head><body>

<p>foobar</p>
<p>foobar</p>
<p>foobar</p>
<p>foobar</p>

<div style="margin-left:200px;">
        <div style="position:relative; overflow:hidden; height:120px; width:128px;">
                <div id="content" style="position: absolute; width: 117px; padding: 5px; left: 0; top: 0;">
                        Bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />
                        bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />
                        bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />bla<br />
                </div>
        </div>
        <a href="#" onclick="return false" onmousedown="scrollDiv('content',8,this)">Hoch</a><br />
        <a href="#" onclick="return false" onmousedown="scrollDiv('content',-8,this)">Runter</a>
</div>

</body></html>


mfg Maik
 
... gleiches gilt übrigens auch hier, wenn das bestehende Markup in einen relativ positionierten DIV eingebettet wird (die margin-Angaben dienen nur zur Demonstration, wie sich das Konstrukt im Viewport verhält):
Code:
<html>
<head>
<title>DHTMLCentral.com - Free Dynamic HTML Scripts - ScrollText Demo</title>

<META NAME="Generator" CONTENT="Designer:Thomas Brattli (www.bratta.com)">
<meta name="KeyWords" content="DHTML, HTML, Dynamic HTML, Javascript, Cascading Style Sheets, Cross-browser, Cross browser, Javascripts, DOM, Scripts, Free Scriptsscrolltext,text,scroll,move,slide,mouseover,effect,iframe,">
<meta name="Description" content="Dynamic HTML Central - The ultimate place to find DHTML scripts, demos, tutorials and help.">
<style type="text/css">
#divParent { position:relative; margin-top:150px; margin-left:200px;}
#divUp   {position:absolute; left:170px; top:190px;}
#divDown {position:absolute; left:170px; top:380px;}
#divScrollTextCont {position:absolute; left:170px; top:220px; width:300px; height:150px; clip:rect(0px 300px 150px 0px); overflow:hidden; visibility:hidden;}
#divText {position:absolute; left:0px; top:0px;}
</style>
<script language="JavaScript" type="text/javascript">
/**********************************************************************************
ScrollText
*   Copyright (C) 2001 <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a>
*   This script was released at DHTMLCentral.com
*   Visit for more great scripts!
*   This may be used and changed freely as long as this msg is intact!
*   We will also appreciate any links you could give us.
*
*   Made by <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a>
*********************************************************************************/

function lib_bwcheck(){ //Browsercheck (needed)
        this.ver=navigator.appVersion
        this.agent=navigator.userAgent
        this.dom=document.getElementById?1:0
        this.opera5=this.agent.indexOf("Opera 5")>-1
        this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
        this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
        this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
        this.ie=this.ie4||this.ie5||this.ie6
        this.mac=this.agent.indexOf("Mac")>-1
        this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
        this.ns4=(document.layers && !this.dom)?1:0;
        this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
        return this
}
var bw=new lib_bwcheck()


/*****************

You set the width and height of the divs inside the style tag, you only have to
change the divScrollTextCont, Remember to set the clip the same as the width and height.
You can remove the divUp and divDown layers if you want.
This script should also work if you make the divScrollTextCont position:relative.
Then you should be able to place this inside a table or something. Just remember
that Netscape crash very easily with relative positioned divs and tables.

Updated with a fix for error if moving over layer before pageload.

****************/


//If you want it to move faster you can set this lower, it's the timeout:
var speed = 30

//Sets variables to keep track of what's happening
var loop, timer

//Object constructor
function makeObj(obj,nest){
    nest=(!nest) ? "":'document.'+nest+'.'
        this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;
          this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0;
        this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight
        this.clipHeight=bw.ns4?this.css.clip.height:this.el.offsetHeight
        this.up=goUp;this.down=goDown;
        this.moveIt=moveIt; this.x=0; this.y=0;
    this.obj = obj + "Object"
    eval(this.obj + "=this")
    return this
}

// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

function moveIt(x,y){
        this.x = x
        this.y = y
        this.css.left = this.x+px
        this.css.top = this.y+px
}

//Makes the object go up
function goDown(move){
        if (this.y>-this.scrollHeight+oCont.clipHeight){
                this.moveIt(0,this.y-move)
                        if (loop) setTimeout(this.obj+".down("+move+")",speed)
        }
}
//Makes the object go down
function goUp(move){
        if (this.y<0){
                this.moveIt(0,this.y-move)
                if (loop) setTimeout(this.obj+".up("+move+")",speed)
        }
}

//Calls the scrolling functions. Also checks whether the page is loaded or not.
function scroll(speed){
        if (scrolltextLoaded){
                loop = true;
                if (speed>0) oScroll.down(speed)
                else oScroll.up(speed)
        }
}

//Stops the scrolling (called on mouseout)
function noScroll(){
        loop = false
        if (timer) clearTimeout(timer)
}
//Makes the object
var scrolltextLoaded = false
function scrolltextInit(){
        oCont = new makeObj('divScrollTextCont')
        oScroll = new makeObj('divText','divScrollTextCont')
        oScroll.moveIt(0,0)
        oCont.css.visibility = "visible"
        scrolltextLoaded = true
}
//Call the init on page load if the browser is ok...
if (bw.bw) onload = scrolltextInit

/***************
Multiple Scripts
If you have two or more scripts that use the onload event, probably only one will run (the last one).
Here is a solution for starting multiple scripts onload:
   1. Delete or comment out all the onload assignments, onload=initScroll and things like that.
   2. Put the onload assignments in the body tag like in this example, note that they must have braces ().
   Example: <body onload="initScroll(); initTooltips(); initMenu();">
**************/
</script>
</head>

<body marginleft="0" marginheight="0">

<div id="divParent">

<div id="divUp">
        <a href="#" onmouseover="scroll(-2)" onmouseout="noScroll()" onclick="return false">[slow]</a>
        <a href="#" onmouseover="scroll(-7)" onmouseout="noScroll()" onclick="return false">[medium]</a>
        <a href="#" onmouseover="scroll(-10)" onmouseout="noScroll()" onclick="return false">[fast]</a>
</div>

<div id="divDown">
        <a href="#" onmouseover="scroll(2)" onmouseout="noScroll()" onclick="return false">[slow]</a>
        <a href="#" onmouseover="scroll(7)" onmouseout="noScroll()" onclick="return false">[medium]</a>
        <a href="#" onmouseover="scroll(10)" onmouseout="noScroll()" onclick="return false">[fast]</a>
</div>

<div id="divScrollTextCont">
        <div id="divText">
                <p>News: <br>
                www.bratta.com/dhtml - Have you ever experienced DHTML is now updated
                with more script, demos and how to's then ever. Visit now!
                Also added: The DHTML Scriptomania, a new and better interface
                to browser the scripts, demos and how to's.</p>
                <p>
                test text test text test text test text test text test text<br><br>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text<br></p>
                <p>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text<br><br>
                test text test text test text test text test text test text<br>
                test text test text test text test text test text test text - END</p>
        </div>
</div>

</div><!-- END div#divParent -->

</body>
</html>


mfg Maik
 
Zurück