offsetTop()和scrollTop()的用法以及与之相关其他方法

(1)offsetLeft()和offsetTop() :动态计算标签的距离

在页面任一元素的offsetLeft或offsetTop总是跟距离自己最近的有position属性的元素定位,取其left值和top值。如果没有,就根据根节点body定位,然后获取其left值或top值。

无position属性的情况:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        #container{
            width:300px;
            height:300px;
            background:#00f;
            margin:30px auto;
            /*position: absolute;*/
        }
        #box{
            width:200px;
            height:200px;
            background:grey;
            margin-left:10px;
        }
    </style>
    <script type="text/javascript">
        function obtainSize(){
            var boxSize=document.getElementById('box');
            console.log(boxSize.offsetLeft);
            console.log(boxSize.offsetTop);
        }
    </script>
</head>
<body>
    <div id="container" >
        <div id="box" onclick="obtainSize()"></div>
    </div>
</body>
</html>

有position属性的情况;

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        #container{
            width:300px;
            height:300px;
            background:#00f;
            margin:30px auto;
            position: absolute;
        }
        #box{
            width:200px;
            height:200px;
            background:grey;
            margin-left:10px;
        }
    </style>
    <script type="text/javascript">
        function obtainSize(){
            var boxSize=document.getElementById('box');
            console.log(boxSize.offsetLeft);
            console.log(boxSize.offsetTop);
        }
    </script>
</head>
<body>
<div id="container" >
    <div id="box" onclick="obtainSize()"></div>
</div>
</body>
</html>

 

(2)offsetWidth()和offsetHeight()(数值类型)   获得元素实际的高度和宽度。(一直到border)例子如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>offsetTop()和offsetHeight()方法的应用</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 300px;
            padding: 20px;
            border: 4px solid blue;
            margin: 40px auto;
        }
    </style>
    <script>
        window.onload = function () {
            let box = document.getElementById("box");
            let boxWidth = box.offsetWidth;
            let boxHeight = box.offsetHeight;
            console.log(boxWidth);
            console.log(boxHeight);
            //获得的width为348,数值类型,元素内容的宽度(300)+padding+border
            //获得的height为360,数值类型,元素内容的高度(自适应,不写死)+padding+border
        }
    </script>
</head>
<body>
<div id="box">
    UCan下午茶是UCloud于2017年启动的系列技术沙龙。
    该沙龙不仅会分享UCloud最新的技术重点,
    同时也会诚邀业界相关方向的技术大咖一同交流、分享。诚意满满的干货、鲜活生动的案例内容,
    将使每位参与者不负午后时光,场场“悟”有所值。

    2018“UCan下午茶”将会继续秉承技术为先、实践为主的宗旨,
    为大家分享真正的技术干货,同时,相对于2017年,2018 “UCan下午茶”将会增加目前在市场上火热的区块链,
    人工智能等前沿技术方向的探讨和交流,希望能够使您在2018年收获满满,“悟”有所值!

</div>
</body>
</html>

(3)scrollTop():获得滚动条的位置。

注意:滚动条的位置:已经滚动上去的元素内容的高度。

应用效果:滚动条平缓移动的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 300px;
            height: 200px;
            border: 4px solid blue;
            margin: 20px auto;
            overflow: auto;
        }
      
    </style>
    <script>
        window.onload = function () {
            var box = document.getElementById("box");
            var start = document.getElementById("start");
            var pasue = document.getElementById("pasue");

            start.onclick = function () {
                // 设置定时器

              timer = setInterval(function () {
                     // 获取当前滚动条的位置
                    var old = box.scrollTop;
                    // 改变滚动条的位置:给当前滚动条的位置+10
                    var news = old + 10;
                    // 将新滚动条的位置赋值回去
                    box.scrollTop = news;
                },200)
              
            }
            pasue.onclick = function () {
            clearInterval(timer);
            }

        }
    </script>
</head>
<body>
<input type="button" value="开始阅读" id="start">
<input type="button" value="停止阅读" id="pasue">

<div id="box">
    UCan下午茶是UCloud于2017年启动的系列技术沙龙。
    该沙龙不仅会分享UCloud最新的技术重点,
    同时也会诚邀业界相关方向的技术大咖一同交流、分享。诚意满满的干货、鲜活生动的案例内容,
    将使每位参与者不负午后时光,场场“悟”有所值。

    2018“UCan下午茶”将会继续秉承技术为先、实践为主的宗旨,
    为大家分享真正的技术干货,同时,相对于2017年,2018 “UCan下午茶”将会增加目前在市场上火热的区块链,
    人工智能等前沿技术方向的探讨和交流,希望能够使您在2018年收获满满,“悟”有所值!
    活动主题:从区块链到数字货币安全
    众所周知,链圈和币圈经常纷争不止。但其实两边都是区块链行业繁荣的重要组成部分。
    区块链真正解决的,是数字世界的信任问题,然而,在没有彻底解决诸如安全、性能、
    一致性等一系列问题之前,
    区块链解决信任问题的梦想只能是空中楼阁。
    为此,UCloud将举办UCan下午茶活动,本次沙龙除了重点讲解如何解决区块链安全、
    性能等方面的问题,
    包括区块链多重签名、虚拟货币的安全、如何打造公有链等。
    活动主题:游戏出海,那些弯和那些坑
    随着游戏市场日趋扩大及竞争的日益激烈,虽然如今游戏出海已经过了满地肥肉的时代,
    成为一场拼资源拼实力的硬仗,但很多游戏厂商仍然对出海趋之若鹜,
    毕竟,虽然海外市场,特别 是欧美市场竞争非常惨烈,
    但同时也是一个回报比较高的市场。那么,对于游戏出海来说,
    应该怎样避免走弯路,应该注意哪些坑呢。本次UCan下午茶将会为您解答这些方面的疑问,
    重点探讨游戏出海面临的困难、挑战以及应对的方法和手段,
    同时,也会就一些游戏开发方面的技术问题进行较为深入的交流和讨论。
</div>
</body>
</html>

(4)offsetHeight()  获取滚动条内容的总高度。这个用法较为简单,不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值