document.documentElement.与document.body区别

本文介绍了解决IDEA环境下document.body.scrollTop对象无法使用的问题,并提供了实现页面滚动及回顶部功能的具体代码示例。

问题:idea环境下使用document.body.scrollTop对象无法实现。

解决方案:将document.body.scrollTop替换为document.documentElement.scrollTop。

原因:<!DOCTYPE..>标签时使用document.documentElement

没有<!DOCTYPE..>标签时,使用document.body

IE5.5之后不支持document.body.scrollX对象

最后附上返回底部功能实现的源码 

html代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="app.js"></script>
</head>
<body>
    <div class="box">
        <img src="阿离.jpg" height="4000px"><br/>
    </div>
    <a  href="javascript:;" class="btn" title="回到顶端" id="btn"></a>
</body>
</html>

JS:



window.onload = function () {
    var topbtn = document.getElementById("btn");
    var timer = null;
    var pagelookheight = document.documentElement.clientHeight;


    window.onscroll = function(){
//        alert("hello");
        var backtop = document.documentElement.scrollTop;
        if(backtop >= pagelookheight){
            topbtn.style.display = "block";
        }else{
            topbtn.style.display = "none";
        }
    }


    topbtn.onclick = function () {
//        alert("Hello")


        timer = setInterval(function () {
            var backtop = document.documentElement.scrollTop;
            var speedtop = backtop/5;
            document.documentElement.scrollTop = backtop -speedtop;
            if(backtop ==0){
                clearInterval(timer);
            }
        }, 30);
    }
}


css:



*{
    margin: 0;
    padding: 0;
}


.box{
    width: 1000px;
    margin: 0 auto;
}


.btn{
    width: 40px;
    height: 80px;
    position: fixed;
    bottom: 30px;
    background: red;
    left: 50%;
    margin-left: 500px;
}


.btn:hover{
    background: green;
}




这段代码主要实现了判断是否为IE浏览器,并在IE浏览器环境下获取页面滚动位置鼠标位置的功能,以下是对代码各部分含义的详细解析: ### 1. `if (document.all)` `document.all` 是一个在旧版IE浏览器中存在的属性,现代浏览器(如Chrome、Firefox等)已经不支持该属性。因此,通过判断 `document.all` 是否存在,可以粗略地判断当前浏览器是否为IE浏览器。如果 `document.all` 存在,则表示当前使用的是IE浏览器,代码块内的逻辑将会执行。 ### 2. 页面滚动位置的获取 ```javascript x = (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft; y = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop; ``` - **`x` 的计算**:`x` 代表页面水平方向的滚动位置。使用三元运算符来判断 `document.documentElement` 是否存在且 `document.documentElement.scrollLeft` 是否有值。如果条件成立,则将 `document.documentElement.scrollLeft` 的值赋给 `x`;否则,将 `document.body.scrollLeft` 的值赋给 `x`。 - **`y` 的计算**:`y` 代表页面垂直方向的滚动位置。同样使用三元运算符来判断 `document.documentElement` 是否存在且 `document.documentElement.scrollTop` 是否有值。如果条件成立,则将 `document.documentElement.scrollTop` 的值赋给 `y`;否则,将 `document.body.scrollTop` 的值赋给 `y`。 ### 3. 鼠标位置的计算 ```javascript x += window.event.clientX; y += window.event.clientY; ``` - **`window.event`**:`window.event` 是IE浏览器特有的事件对象,用于获取当前事件的相关信息。 - **`clientX` `clientY`**:`clientX` 表示鼠标相对于浏览器窗口可视区域左上角的水平坐标,`clientY` 表示鼠标相对于浏览器窗口可视区域左上角的垂直坐标。 - **最终的 `x` `y`**:将页面滚动位置(`x` `y`)分别加上鼠标相对于浏览器窗口可视区域的坐标(`window.event.clientX` `window.event.clientY`),得到鼠标相对于整个页面的实际坐标。 ### 代码示例 ```javascript if (document.all) { // 获取页面滚动位置 let x = (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft; let y = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop; // 获取鼠标相对于浏览器窗口可视区域的坐标 x += window.event.clientX; y += window.event.clientY; console.log(`鼠标相对于整个页面的水平坐标: ${x}`); console.log(`鼠标相对于整个页面的垂直坐标: ${y}`); } ``` ### 总结 这段代码通过判断 `document.all` 属性来确定是否为IE浏览器,并在IE浏览器环境下获取页面的滚动位置鼠标相对于整个页面的实际坐标。需要注意的是,`document.all` `window.event` 都是旧版IE浏览器特有的属性对象,在现代浏览器中已经不被支持,因此在实际开发中应尽量避免使用这些旧的特性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值