zoukankan      html  css  js  c++  java
  • js-API 05 高级动画

    1,client
    获取元素内容到边框的距离,效果和边框宽度相同
    clientX和clientY是属性值
    element.style.left=element.clientX;鼠标水平属性值
    element.style.top=element.clientY;鼠标垂直属性值
    clientLeft:broder(不含margin)
    clientTop:broder(不含margin)
    clientWidth:width+padding(不含边框)
    clientHeight:height+padding(不含边框)
    2,offset
    offsetWidth:width+broder+padding(不含margin)(含垂直滚动条宽度)
    offsetHeight:height+broder+padding(不含margin)(含水平滚动条宽度)
    offsetTop:top-margintop(还是不含margin)
    offsetLeft:left-marginleft(还是不含margin)
    即使元素加上水平或垂直滚动条,offsetWidth跟offsetHeight的值是不会更改的,因为浏览器渲染时把滚动条的宽度(或高度)算在了元素本身的宽度(或高度)中了。
    3,scroll
    scrollWidth:文本宽度(包括由于溢出而无法展示在网页的不可见部分)
    scrollHeight:文本高度(包括由于溢出而无法展示在网页的不可见部分)
    scrollTop:右侧滚动条滚动的距离
    scrollLeft:底部滚动条滚动的距离
    4,pageX/Y(相对于文档边缘,包含滚动条距离)
    element.style.left=element.pageX;鼠标水平属性值(相对于文档边缘,包含滚动条距离)
    element.style.top=element.pageY;鼠标垂直属性值(相对于文档边缘,包含滚动条距离)
    5,获取属性(存在兼容性问题)
    window.getComputedStyle(ele,null)
    currentStyle:IE专用(不支持伪类样式的获取)
    6,可以获取指定属性的值
    getPropertyValue方法
    7,offsetParent
    如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。
    如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。
    对于offsetParent为body的情况,现在的主流浏览器IE8/9/10和Chrome及Firefox都跟定义
    offsetLeft=(offsetParent的padding-left)+(中间元素的offsetWidth)+(当前元素的margin-left)。
    offsetTop=(offsetParent的padding-top)+(中间元素的offsetHeight)+(当前元素的margin-top)。
    封装动画ani(ele,json)
    //动画库,ele,json对象(改变单个元素的多个属性,可以设置各自的目标属性值)
    function ani(ele, json) {
        clearInterval(ele.timer)//清除定时器
        var step;
        // 获取元素的属性兼容写法
        
        ele.timer = setInterval(function () {//给该元素设置定时器
            var flag = true; //默认动画全部完成,可以通过
            for (var attr in json) {//对json的每个属性进行遍历
                var current = parseInt(getCss(ele, attr));//将属性值的数字部分读取并存入自定义变量
                target = json[attr];//将目标值存入自定义变量中
                step = (target - current)/10;//步长设定为差量的十分之一
                step=step>0?Math.ceil(step):Math.floor(step);//对步长进行分支判断,负数向下取整,正数向上取整
                current+=step;//对步长进行累加赋给变量
                ele.style[attr] = current + 'px';//对该元素的属性进行赋值,让它逐渐接近target
                if(current!=target){ //如果偏移量还不到target
                    flag = false;//则让它不可清除计时器
                }
            }
            if(flag){//
                clearInterval(ele.timer)//清除定时器
            }
            console.log('目标值:'+target+"当前值:"+current+'step:'+step)
        }, 50)
    
    }
  • 相关阅读:
    python 有关datetime时间日期 以及时间戳转换
    开园杂记
    vue beforeRouteEnter 注意点
    html 头像裁剪框
    window server服务器配置ftp服务
    js 使用 delete 删除对象的属性
    win 自带的截屏工具
    idea 配置新建类自动加注解
    mysql varchar 使用唯一索引时无法区分大小写 可以使用varbinary
    在 laradock 环境中使用 laravel-swoole 加速你的 laravel 应用
  • 原文地址:https://www.cnblogs.com/adylz111/p/13433680.html
Copyright © 2011-2022 走看看