示例:屏幕右側懸浮框
原理:oDiv.style.top = document.documentElement.clientHeight - oDiv.offsetHeight + scrollTop + "px";
知識點:
瀏覽器窗體的高度
document.documentElement.clientHeight
瀏覽器滾動的高度
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
html部分
<body style=" height:1600px;"> <div id="div1"></div> </body> #div1 { position:absolute; right:0; bottom:0; width:100px; height:150px; background:green;}
js部分
<script> window.onscroll = function(){ var oDiv = document.getElementById("div1"); var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; //oDiv.style.top = document.documentElement.clientHeight - oDiv.offsetHeight + scrollTop + "px"; oDiv.style.top = startMove(document.documentElement.clientHeight - oDiv.offsetHeight + scrollTop); } var timer = null; function startMove(iTarget){ clearInterval(timer); timer = setInterval(function(){ var oDiv = document.getElementById("div1"); var speed = (iTarget - oDiv.offsetTop)/4; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if(oDiv.offsetTop == iTarget){ clearInterval(timer); } else { oDiv.style.top = oDiv.offsetTop + speed + "px"; } },30); } </script>
同上面這個懸浮框,可心改成另一個示例:對聯懸浮框
示例:對聯懸浮框
原理:
iTarget = (document.documentElement.clientHeight - oDiv.offsetHeight)/2 + scrollTop;
潛在問題:
對聯一直在不停的抖動
檢測分析:
1,打印出這個div 的offsetTop,發現它的值始終在兩個相關1像素的值之間跳動
2,再打印iTarget發現它是800.5
原因:iTarget不是一個整數,造成“對聯”不停的抖動
解決:
iTarget = parseInt((document.documentElement.clientHeight - oDiv.offsetHeight)/2 + scrollTop);