博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缓动动画封装
阅读量:5019 次
发布时间:2019-06-12

本文共 2141 字,大约阅读时间需要 7 分钟。

缓动动画的实现原理:盒子本身的位置+步长

其中步长由小变大,是不断变化的,

步长公式 begin+=(end-begin)*缓动系数

使用开发的过程中可以不必考虑公式的具体由来;

封装缓动动画的过程需要考虑,透明度变化以及的\滚动距离的变化,不断完善函数,封装的过程中,需要通过js访问css属性,以下是两种常用于访问css中属性的方法,两种方法都有自己的特点:

1.通过点语法获取css属性:

如:box.style.left  ,box.style.width......

使用点语法只能获取当行内的属性,无法获取大页面得属性,所以点语法存在一个致命的问题,跟在style后的属性不能由外面传入;

2.下标语法

利用[]访问属性,语法:   元素.style["属性"];

优点:可以动态传递参数作为属性

如:

let h="height";

box.style[h]=300+px;

 

function getStyle(obj,attr){    if(obj.currentStyle){        return obj.currentStyle[attr];    }else{        return window.getComputedStyle(obj,null)[attr];    }}//缓动动画function buffer(obj,json,fn){    let timer=null;    //清除定时器    clearInterval(obj.timer);    //定义变量    let begin=0,target=0,speed=0;    //开启定时器    obj.timer=setInterval(function(){        //定义旗帜标识清除定时器的条件        let flag=true;        //遍历json        for(let k in json){            //求初始值            if("opacity"===k){                //透明度                begin=Math.round(parseFloat(getStyle(obj,k))*100)||100;                target=parseInt(json[k]*100);            }else if("scrollTop"===k){                //滚动                begin=Math.ceil(obj.scrollTop);                target=parseInt(json[k]);            }else{                begin=parseInt(getStyle(obj,k));                target=parseInt(json[k]);            }            //求步长            speed=(target-begin)*0.2;            //判断是否取整            speed=(target>begin)?Math.ceil(speed):Math.floor(speed);            //让目标动起来            if("opacity"===k){                //透明度                //w3c标准浏览器                obj.style.opacity=(begin+speed)/100;                //IE浏览器                obj.style.filter='alpha(opacity:'+(begin+speed)+')';            }else if("scrollTop"===k){                //滚动距离                obj.scrollTop=begin+speed;            }else{                //其他情况                obj,style[k]=begin+speed+"px";            }            //判断            if(begin!==target){                flag=false;            }        }        if(flag){            clearInterval(obj.timer);            if(fn){                fn();            }        }    },30);}

 

转载于:https://www.cnblogs.com/zhang-jiao/p/9929673.html

你可能感兴趣的文章
Airthmetic_FindNumberFromArray
查看>>
【软件测试】实现Editing Boxing并测试
查看>>
SQL Server-聚焦NOT EXISTS AND NOT IN性能分析(十五)
查看>>
linux 中 timeval结构体
查看>>
第五周笔记
查看>>
POJ 1815 Friendship(字典序最小的最小割)
查看>>
FZU Super A^B mod C(欧拉函数降幂)
查看>>
【BZOJ1179】 [Apio2009]Atm tarjan缩点+SPFA
查看>>
初步了解Maven
查看>>
WebStorm常用设置和常用快捷键
查看>>
英文词频统计预备,组合数据类型练习
查看>>
hibernate核心思想 体系结构(转)
查看>>
Amazon Route 53 路由到不同资源的配置差异
查看>>
Python 一些有趣的技巧,包括协程例
查看>>
数据持久化
查看>>
Java并发性和多线程介绍目录
查看>>
codeforces #322 div 2 A. Vasya the Hipster(随便搞)
查看>>
Ubuntu下执行mysql的sql文件
查看>>
JavaScript 声明全局变量和局部变量
查看>>
侯捷C++11:一致性初始化
查看>>