js基础之动画

获取宽高的三大系列

  1. 元素偏移量offset系列属性
    • element.offsetParent 返回作为该元素带有定位的父级元素,没有定位返回body(区别于element.parentNode 返回亲爸爸)
    • element.offsetTop 返回相对带有定位父元素上方的偏移量
    • element.offsetLeft 返回相对带有定位父元素左边框的偏移量
    • element.offsetWidth 返回盒子宽度 无单位 水平宽度包括padding和border
    • element.offsetHeight 返回盒子高度 无单位 垂直高度(包含border,padding)
  2. client系列
    • element.clientTop 上边框的大小
    • element.clientLeft 左边框的大小
    • element.clientWidth 元素的宽包括paddding、内容区的高度、不包括边框、不带单位
    • element.clientHeight 元素的高包括padding、内容区的高度
  3. 立即执行函数
    • 不需要调用,立马能够自己执行的函数:(function(){}())、(function(){})()
    • 最大的作用:独立创建了一个作用域,都是局部变量
  4. (window).pageshow事件
    • 三种情况刷新触发load事件:
      • a标签
      • F5或刷新按钮
      • 前进后退
      • 特殊:火狐有往返缓存,用load不行,得改用pageshow
  5. resize事件:页面大小发生变化
  6. 元素scroll系列属性
    • scrollHeight 内容高度,不含边框
    • scrollWidth 实际宽度,不含边框
    • scrollTop 离可视区上方里的距离(被卷去上侧的距离)
    • scrollLeft 离可视区左侧里的距离(被卷去左侧的距离)
    • scroll事件 页面滚动
    • 页面被卷去的头部,可以通过window.pageYOffset获得
    • 对比:元素被卷去的头部,可以通过element.scrollTop获得

三大系列总结

  1. 区别:
    • element.offsetWidth 返回padding、边框、内容区的宽度
    • element.clientWidth 返回padding、内容区的宽度、不含边框
    • element.scrollWidth 返回自身实际的宽度、不含边框
  2. 用法
    • offset系列:获取元素位置
    • client系列:获取元素大小
    • scroll系列:获取滚动的距离
    • 页面滚动距离通过window.pageXOffset

动画

  1. 动画原理:通过定时器setInterval()不断移动盒子的位置
  2. 动画函数简单封装:传两个参数:动画对象obj、移动到的距离target
  3. 动画函数给不同元素记录不同定时器
    // 核心:js一门动态语言,方便给当前对象添加属性
    <head>
    	<style>
            div {
                position: absolute;
                left: 0;
                height: 200px;
                width: 200px;
                background-color: pink;
            }
    
            span {
                display: block;
                position: absolute;
                left: 0;
                top:300px;
                width: 100px;
                height: 100px;
                background-color: burlywood;
            }
        </style>
    </head>
    
    <body>
        <button>点击夏雨荷才走</button>
        <div></div>
        <span>夏雨荷</span>
        <script>
        // 动画函数封装
            // var obj = {};
            // obj.name = 'andy'
            // 给不同的元素记录不同的定时器
            function animate(obj, target){
                //不断按击按钮,元素的速度会越来越快,因为开启了太多的定时器
                //只设置一个定时器
                //解决方案:清除以前的定时器,留下当前一个定时器
                clearInterval(obj.timer)
                obj.timer = setInterval(function () {
                if(obj.offsetLeft >= target){
                    //停止动画的本质是清除定时器 
                    clearsetInterval(obj.timer);
                }
                obj.style.left = obj.offsetLeft + 5 + 'px';
            }, 30);
            }
            var div = document.querySelector('div');
            var span = document.querySelector('span');
            var button = document.querySelector('button');
            //调用函数
            animate(div, 300); 
            button.addEventListener('click', function(){
                animate(span, 400);
            })
        </script>
    
  4. 缓动效果原理:让元素运动速度有所变化、慢慢停下来
    • 核心:(目标值-现在位置)/10
    • 停止:当前盒子位置=目标位置就停止
  5. 动画函数多个目标值之间移动
    • 判断步长的正负
      var step = (target - obj.offsetLeft) / 10;
      step = step > 0 ? Math.ceil(step) : Math.floor(step)
      
  6. 动画函数添加回调函数
    • 回调函数原理:函数可以作为一个参数,将函数作为参数传到另一个函数里,当那个函数执行完之 后,再执行传进去的函数,这过程回调
    • 回调函数写在定时器结束的地方
      if (obj.offsetLeft == target) {
          clearInterval(obj.timer);
          //回调函数写到定时器结束的位置
          if (callback) {
              callback();
          }
      }
      

轮播图自动播放功能

  • 定时器
  • 类似点击右侧按钮
  • 手动调用右侧按钮事件:arrow_r.click()即元素.click()元素被点击

返回顶部功能

  1. window.scroll(x, y); 不带单位
  2. 用封装函数,把所有的left相关的值改为跟页面垂直滚动的距离;
  3. 页面滚动了多少用 window.pageYOffset
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值