Den benutze ich für Hoch/Runter für Anker:
Code:
//var scrollSteps = 200
var scrollSteps = 50;
var timer="";
function scrollWin(anchorID) {
if (navigator.userAgent.indexOf("Opera") == -1){ // not Opera
var s,d;
var test1 = document.body.scrollHeight;
var test2 = document.body.offsetHeight
if (test1 > test2) // all but Explorer Mac
{
s = document.body.scrollWidth;
d = document.body.scrollHeight;
}
else // Explorer Mac;
{ //would also work in Explorer 6 Strict, Mozilla and Safari
s = document.body.offsetWidth;
d = document.body.offsetHeight;
}
var a,b;
if (self.innerHeight) // all except Explorer
{
a = self.innerWidth;
b = self.innerHeight;
}
else if (document.documentElement && document.documentElement.clientHeight)
// Explorer 6 Strict Mode
{
a = document.documentElement.clientWidth;
b = document.documentElement.clientHeight;
}
else if (document.body) // other Explorers
{
a = document.body.clientWidth;
b = document.body.clientHeight;
}
var y;
if (self.pageYOffset) // all except Explorer
{
y = self.pageYOffset;
}
else if (document.documentElement && document.documentElement.scrollTop)
{ // Explorer 6 Strict
y = document.documentElement.scrollTop;
}
else if (document.body) // all other Explorers
{
y = document.body.scrollTop;
}
var id = anchorID.substring(anchorID.indexOf("#")+1,anchorID.length)
clearTimeout(timer)
if (y <= document.getElementById(id).offsetTop-scrollSteps)
{ // scroll down
window.scrollBy(0,scrollSteps);
timer=setTimeout("scrollWin('"+id+"')",10);
if(y > (d-b)-scrollSteps){
clearTimeout(timer);
y = d-b;
}
}
else
{
if(y >= document.getElementById(id).offsetTop+scrollSteps)
{ // scroll up
window.scrollBy(0,-scrollSteps)
timer=setTimeout("scrollWin('"+id+"')",10)
}
else
{ // scroll the last bit (smaller than scrollSteps)
window.scrollBy(0, document.getElementById(id).offsetTop- y);
clearTimeout(timer)
y = document.getElementById(id).offsetTop
}
}
return false;
}
return true;
}
Das kann man jetzt noch für Rechts/Links erweitern. Aber wie man hier sieht: Opera ist außen vor.
Bernhard
ADD:
a) Herzlich willkommen in der
DP
b) Auch wenn ich jetzt schon geantwortet habe: Lieber nen neuen Thread aufmachen.