JavaScript基础(三)

1.offsetWidth

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 200px;
            height: auto;
            border: 1px solid #ccc;
        }
        p{
            width: 200px;
            height: 200px;
            border: 10px solid red;
            padding-left: 15px;
            margin: 50px;
        }
    </style>
</head>
<body>
<div>
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充
    自己填充自己填充自己填充自己填充自己填充自己填充自己填充自己填充

</div>
<p></p>
</body>
</html>
<script>
    var div = document.getElementsByTagName("div")[0];
    var p = document.getElementsByTagName("p")[0];
    console.log(div.offsetHeight);   // 596 -> 盒子内容的高度
    console.log(p.offsetWidth);  // 235  200 + border-left 10 + border-right 10+ padding-left 15 =235-> 盒子的实体大小
</script>

2.offsetLeft

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {margin:0;padding:0;}
        #father {
            margin: 100px;
            width: 400px;
            height: 400px;
            background-color: pink;
            /*position: absolute;*/ // 如果这个不注销。子孩子就相对这个。
        }
        #son {
            width: 100px;
            height: 100px;
            background-color: purple;
        }
    </style>
</head>
<body>
<div id="father">
    <div id="son"></div>
</div>
</body>
</html>
<script>
    var son = document.getElementById("son");
    console.log(son.offsetLeft);  //  100 因为 父亲没有定位 ,所以是相对于body来说,如果父亲加了定位,那么结果就是0,因为这个是遵守最近父类定位原则。
    console.log(son.offsetTop);  //  100 因为 父亲没有定位
</script>

3.offsetParent

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .one {
            position: absolute;
        }
    </style>
</head>
<body>
<div class="one" id="one">
    <div class="two" id="two">
        <div class="three" id="three"></div>
    </div>
</div>
</body>
</html>
<script>
    var  three = document.getElementById("three");
    //alert(three.offsetParent.tagName);  // tagName 标签名字
    alert(three.offsetParent.id);  //    one 得到最近定位的父类的那个标签。
    alert(three.parentNode.id);  //   two
</script>

4.style.left 和 offsetLeft区别

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 100px;
        }
    </style>
</head>
<body>
<div id="box" style="position: absolute; left: 100px;"></div>
</body>
</html>
<script>
    var box = document.getElementById("box");
    console.log(box.style.left);  // left top   z-index  只有定位才有
    console.log(box.offsetLeft);  // 不管有没有定位,它都能得到值

</script>

5.动画原理

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            position: absolute;
            left: 0;
            background-color: pink;
        }
    </style>
</head>
<body>
<button id="btn">开始</button>
<div id="box"></div>
</body>
</html>
<script>
    var btn = document.getElementById("btn");
    var box = document.getElementById("box");
    var timer = null;
    btn.onclick = function() {
        // 盒子本身的位置 +  步长
       timer = setInterval(function() {
           box.style.left = box.offsetLeft + 5 + "px";  // 核心的动画原理
           console.log(box.offsetLeft);
           // 到了某个地方就应该停止定时器
           if(box.offsetLeft >=400) {  // 知道为什么用 offsetLeft  不带px
               clearInterval(timer);
           }
       },30)
    }
</script>
  1. 封装缓动动画基本写法
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
            left: 0;
        }
    </style>
</head>
<body>
<button>200</button>
<button>400</button>
<div></div>
</body>
</html>
<script>
    var btn1 = document.getElementsByTagName("button")[0];
    var btn2 = document.getElementsByTagName("button")[1];
    var box = document.getElementsByTagName("div")[0];
    btn1.onclick = function() {
        animate(box,200);  //1参数 谁动  2参数 动 200
    }
    btn2.onclick = function() {
        animate(box,400);  //1参数 谁动  2参数 动 200
    }
    function animate(obj,target) {
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
           // 运动公式  leader = leader + (target - leadaer) / 10
            var step = (target - obj.offsetLeft) / 10;
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            obj.style.left = obj.offsetLeft + step + "px";
            if(target == obj.offsetLeft) {
                clearInterval(obj.timer);
            }
        },30)
    }
</script>

7.事件对象

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    document.onclick = function(event) {
        var event = event || window.event;
           console.log("您的x坐标是:" +event.clientX + "y坐标是:"+ event.clientY);
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值