其實這個效果在很多網站中都能見到,其主要表現為網頁兩側的浮動廣告。看起來感覺很難做,但其實原理是很簡單的,使用定時器沒0.1秒檢測層的位置並將其置在指定的位置(相對於視窗)。寫了一個簡單的代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title></title> </head> <body> <script type="text/javascript"> function scrollImg(){ var posX,posY; if (window.innerHeight) { posX = window.pageXOffset; posY = window.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop) { posX = document.documentElement.scrollLeft; posY = document.documentElement.scrollTop; } else if (document.body) { posX = document.body.scrollLeft; posY = document.body.scrollTop; } var ad=document.getElementById("ad"); ad.style.top=(posY+100)+"px"; ad.style.left=(posX+50)+"px"; setTimeout("scrollImg()",100); } </script> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <div id="ad" >此廣告位招租</div> <script type="text/javascript"> scrollImg(); </script> </body> </html>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
注意:
if (window.innerHeight) {
posX = window.pageXOffset;
posY = window.pageYOffset;
}
else if (document.documentElement && document.documentElement.scrollTop) {
posX = document.documentElement.scrollLeft;
posY = document.documentElement.scrollTop;
}
else if (document.body) {
posX = document.body.scrollLeft;
posY = document.body.scrollTop;
}
這段代碼是為了相容標準,在xhtml頁面中,document.body.scrollTop始終為0,即該屬性無效,因此必須用其他的屬性來判斷,為相容新舊標準,應該對屬性的可用性進行判斷。
引用網上的一段文字:
引用
應用WEB標準會使ScrollTop屬性失效!!!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
加上這段後,document.body.scrollTop永遠等於0
body onscroll = "alert(document.body.scrollTop);"永遠也不會引發。
解決辦法:
使用:
document.documentElement.scrollTop
樣本一:
var scrollPos;
if (typeof window.pageYOffset != 'undefined') {
scrollPos = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined' &&
document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined') {
scrollPos = document.body.scrollTop;
}
alert(scrollPos);
樣本二:
function WebForm_GetScrollX()
{
if (__nonMSDOMBrowser)
{
return window.pageXOffset;
}
else
{
if (document.documentElement && document.documentElement.scrollLeft)
{
return document.documentElement.scrollLeft;
}
else if (document.body)
{
return document.body.scrollLeft;
}
}
return 0;
}
-------------------------------------
pageYOffset是netscape的
document.body.scrollTop和document.documentElement.scrollTop是ie的,但我不知道他們的真正區別,只知道documentElement.scrollTop是xhtml相容的(我用的是strict)