06DAY学习WEBAPIS第六天、三大系列总结

学习目标

一、scroll系列、元素/对象的滚动事件

1、scroll系列:卷曲----滚出去

对象的属性返回值
scrollWidth获取元素内容的实际宽度
scrollHeight获取元素内容的实际高度
scrollTop上卷曲出去的距离
scrollLeft左卷曲出去的距离

2、元素/对象的滚动条事件

语法:元素.onscroll = 事件处理函数

3、封装getScroll函数,获取浏览器向上卷曲上的距离的值,向左卷曲出去的距离,兼容代码

function getScroll() {
     return {
         top: window.pageYOffset || document.documentElement.scrollTop || 					document.body.scrollTop || 0,
         left: window.pageXOffset || document.documentElement || 							document.body.scrollLeft || 0
     };
 }
二、缓动动画函数

每次移动的步数:(目标-当前) / 10

判断移动的步数: 正数往上取整,负数往下取整

function animation(element,target){
    //先清理定时器
    clearInterval(element.timeId);
    element.timeId=setInterval(function (){
        //获取当前步数/像素
        var current = element.offsetLeft;
        //每次要走的步数
        var step = (target-current)/10;
        //判断正数往上取整,负数往下取整
        step = step > 0?Math.ceil(step):Math.floor(step);
        //移动后的步数
        current+=step;
        //移动
        element.style.left=current+"px";
        //判断如果移动后的步数跟目标步数一致
        if(current==target){
            //清理定时器
            clearInterval(element.timeId);
        }
        //测试,查看每次移动的步数
        console.log("当前:"+current+",目标:"+target+",每次移动的"+step);
    },25)
}
三、获取任意元素的任意一个样式属性的值

1、谷歌、火狐支持

参数1:对象/元素

参数2:伪类、为元素,没有就填null

返回值:css3对象,所有样式的的属性

window.getComputedStyle();

2、IE8支持

对象/元素.currentStyle.left

3、兼容代码

获取任意一个元素的任意样式的属性值

function getStyle(element,attr){
 //判断浏览器是否支持这个方法
 return window.getComputedStyle ? window.getComputedStyle(element,null)[attr] : element.currentStyle[attr];
}
四、回调函数

当一个函数作为参数的使用的时候这个函数就是回调函数

五、变速动画函数封装增加任意一个属性

参数1:元素 参数2:目标 参数3:属性名字

function animation(element,target,attr){
//先清理定时器
clearInterval(element.timeId);
element.timeId = setInterval(function (){
  //获取当前的步数
  var current=parseInt(getStyle(element,attr));//转换成字符串
  //每次要走的步数
  var step = (target-current)/10;
  //每次走的步数是正数往上取整,负数往下取整
  step = step > 0?Math.ceil(step):Math.floor(step);
  //移动后的步数
  current+=step;
  element.style[attr]=current+"px";
  if(current==target){
      //到达目标清理定时器
      clearInterval(element.timeId);
  }
},20)

}
六、变速动画函数封装任意多个属性

参数1:元素 参数2:对象 —>{“width”:200,“top”:50···}—>遍历对象里的每个属性

function animation(element,json){
 //先清理定时器
 clearInterval(element.timeId);
 element.timeId = setInterval(function (){
      var flag = true;//默认、全部到达目标
  //遍历对象里的每个属性
     for(var attr in json){
         //获取当前位置,并将得到的字符串转换成数字类型
         var current = parseInt(getStyle(element,attr));
         //当前属性对应的目标
         var target = json[attr];
         //每次要走的步数
			var step = (target-current)/10;
         //每次走的是正数往上取整,负数往下取整
         step = step > 0?Math.ceil(step):Math.floor(step);
         //移动后的步数
         current+=step;
         element.style[attr]=current+"px";
         if(current!=target){
            flag=false;
           }
    	  }
     if(flag){//到达目标
             //清理定时器
             clearInterval(element.timeId);
         }
 },20)
}
七、最终动画函数(包括opacity透明度、z-Index层级)

1、判断遍历的对象里的每个属性名字是否包含:opacity、z-Index

透明度实现思路:

获取当前的透明度 * 100 (*100是方便计算)

正数往上取整,负数往下取整、移动后的步数

给透明度属性名赋值时 / 100

function animation(element,json,fn){
clearInterval(element.timeId);//先清理定时器
//定时器,返回的是定时器的id
element.timeId=setInterval(function (){
  var flag = true;//默认、假设,全部到达目标
  //遍历json对象中的每个属性还有属性对应的目标值
  for(var attr in json){
      //判断这个属性attr中是不是opacity
      if(attr=="opacity"){
         //获取元素当前的透明度,当前的透明度放大100被,方便计算
         var current = getStyle(element,attr) * 100;
          //目标透明放大100倍
         var target = json[attr] * 100;
         var step = (target-current)/10;
         step = step>0?Math.ceil(step):Math.floor(step);
         current+=step;//移动后的值
         element.style[attr]=current / 100;
      }else if(attr=="zIndex"){//判断这个属性attr是不是zIndex
        //层级改变就是直接改变这个属性的值
        element.style[attr]=json[attr];    
     }else{//普通的属性
         var current = parseInt(getStyle(element,attr));
         //当前属性对应的目标值
         var target = json[attr];
         var step = (target-current)/10;
         step = step>0?Math.ceil(step):Math.floor(step);
         current+=step;
         element.style[attr]=current+"px";
     }
      
       if(current!=target){//是否到达目标
             flag = false;
         }
  }
      if(flag){//到达目标
          clearInterval(element.timeId);//清理定时器
          //所有属性到达目标才能使用这个函数,前提是用户传入这个函数
          if(fn){
              fn();  
      }
  }
  //测试代码
  console.log("当前:"+current+",目标:"+target+",每次移动的步数:"+step)
},25);
}
八、client系列:可视区域

clientWidth:可视区域的宽(没有变框),边框内部的宽度

clientHeight:可视区域的高(没有变框),变框内部的高度

clientLeft:左边边框的宽度

clientTop:上边变框的宽度

九、文档鼠标移动事件、查看事件处理函数参数

1、查看事件函数的参数:arguments

2、文档的鼠标移动事件:document.οnmοusemοve=fn

十、总结三大系列

一、offset系列

1、offsetWidth和offsetHeight

offsetWidth = width+padding+border;

offsetWidth(元素实际宽)与自身的border、padding、widtht有关,与父元素无关(就是边框到边框的距离)

offsetHeight = height+padding+border;

offsetHeight (元素实际高)与自身的border、padding、height有关,与父元素无关(就是边框到边框的距离)

offsetHeight 代码请参考 offsetWidth

2、offsetTop和offsetLeft

1.父元素没有脱离文档流

offsetTop 对齐浏览器,自身最边缘(边框)到客户区最上端的距离

offsetTop = 元素到浏览器的高度

offsetLeft 对齐浏览器,自身最边缘(边框)到客户区最左端的距离

offsetLeft = 元素到浏览器最左端的距离

offsetLeft 代码请参考 offsetTop

2.父元素脱离文档流(position:absolute;

offsetTop 对齐父元素,自身最边缘(边框)到父级最上端的距离

offsetTop = 元素到父级的高度

offsetLeft 对齐父元素,自身最边缘(边框)到父级最左端的距离

offsetLeft = 元素到父级最左端的距离

offsetLeft 代码请参考 offsetTop

3.offsetParent

返回该对象的父级

如果当前元素的父级元素没有进行CSS定位(position为absolute或relative,fixed),offsetParent为body。

如果当前元素的父级元素中有CSS定位,offsetParent取最近的那个父级元素

二、scroll系列

1.clientWidth和clientHeight

检测盒子的宽高

scrollHeight = height + padding; //不包括border和margin;

如果 盒子里面元素的宽度或者高度 大于 盒子的宽度或者高度,scrollWidth和scrollHeight就是盒子里面元素的宽度或者高度

2、scrollTop和scrollLeft

scrollTop: onscroll事件发生时,元素向上卷曲出去的距离

scrollLeft : onscroll事件发生时,元素向左卷曲出去的距离

3、 兼容代码
function getScroll() {
     return {
         left: window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0,
         top: window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0
     };
 }
 
 使用方法:
    1. 取得scrollLeft值: getScroll().left
    2. 取得scrollTop值: getScroll().top

三. client系列

1.client系列的4个常用属性
  1. clientWidth : 获取网页可视区域的宽度
  2. clientHeight: 获取网页可视区域的高度
  3. clientX :获取鼠标事件发生时的**当前页面区域(不包括卷曲出去的值)**的水平坐标
  4. clientY :获取鼠标事件发生时的**当前页面区域(不包括卷曲出去的值)**的垂直坐标

2、clientTop和clientLeft (不常用)

clientLeft:左边边框的宽度

clientTop:上边变框的宽度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值