封装了一个JS方法,可支持块元素的常规动画:高、宽、透明度、位置等,同时支持链式动画和同时运动,参照imooc整理,具体代码如下:

/**
* 获取HTML元素属性值
* obj是Element, attr是属性
**/
function getStyle(obj, attr) {
if (obj.currentStyle) {
  // IE浏览器
  return obj.currentStyle[attr]; 
 } else {
  // Google、Firefox等
  return getComputedStyle(obj, false)[attr];
}
}
/**
* 主函数,实现元素动画。
* obj是Element, attrJson是属性及其目标值的JSON,fn是运动完成后的回调函数,根据回调函数实现链式动画
*/
function startMove(obj, attrJson, fn) {
 // 1. 清空该元素的定时器
clearInterval(obj.timer);
// 变量flag 记录运动是否需要停止
var flag = true;
 // 2. 开启该元素的定时器,间隔时间可重设
 obj.timer = setInterval(function() {
// 遍历attrJson,获取需要运动的属性,对每个属性进行改变
  for (var attr in attrJson) {
// 属性目标值
var iTarget = attrJson[attr];
// 获取原本属性值
var iCur = 0;
if (attr == 'opacity') {
     // 对透明度(opacity)单独处理
iCur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
iCur = parseInt(getStyle(obj, attr));
}
// 判断此属性的运动是否已经完成
if (iTarget == iCur) {
continue;
}
flag = false;
// 8为速度系数,可重设
var speed = (iTarget - iCur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (attr == 'opacity') {
obj.style.filter = 'alpha(opacity:' + (iCur + speed) + ')';
obj.style[attr] = (iCur + speed)/100;
} else {
obj.style[attr] = iCur + speed + 'px';
}
}
// 全部属性均已经运动完成
if (flag) {
clearInterval(obj.timer);
// 如果有回调函数,开启下一个回调函数
if (fn) {
fn();
}
}
 }, 30);
}

调用代码如下:

window.onload = function() {
var li1 = document.getElementById("li1");
li1.onmouseover = function() {
startMove(this, {width:400, height:200, opacity:100});
};
li1.onmouseout = function() {
startMove(this, {width:200, height:100, opacity:30});
}
}

原生JS实现前端动画框架的更多相关文章

  1. 原生JS封装简单动画效果

    原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...

  2. 用原生JS写移动动画案例及实际应用

    js很强大 相信很多人都知道,那么它有哪些强大之处呢?有兴趣的人可以去查查,这里就不赘述了,因为不在本片文章讨论的范围. 我们要讲的是怎么用原生JS写移动动画?我们先举一个最简单的动画例子,很多网站的 ...

  3. 原生js判断css动画结束 css 动画结束的回调函数

    原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...

  4. 原生Js封装的动画类

    算法用的是Tween类,需要研究的参考这篇文章: http://www.cnblogs.com/cloudgamer/archive/2009/01/06/Tween.html 网页里常用的动画 放大 ...

  5. 前端动画框架GSAP框架随笔

    gsap是目前非常流行的前端动画框架,可以非常轻松构造出复杂的动画效果,这里仅对我实际使用中的一些例子进行总结 官网 示例 文章种所使用代码的在线示例 基础用法 // 声明一个滚动控制器 let ct ...

  6. 原生js判断css3动画过度(transition)结束 transitionend事件 以及关键帧keyframes动画结束(animation)回调函数 animationEnd 以及 css 过渡 transition无效

      上图的 demo 主要讲的 是 css transition的过渡回调函数transitionend事件: css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画 ...

  7. 使用原生JS封装一个动画函数

    最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...

  8. 基于canvas与原生JS的H5动画引擎

    前一段时间项目组里有一些H5动画的需求,由于没有专业的前端人员,便交由我这个做后台的研究相关的H5动画技术. 通过初步调研,H5动画的实现大概有以下几种方式: 1.基于css实现 这种方式比较简单易学 ...

  9. 近期学习的原生JS知识以及jQuery框架

    [正则表达式]1.正则表达式包括两部分: ① 定义正则表达式的规则 ② 定义正则表达式的模式(i/g/m)2.声明正则表达式: ① 字面声明 : var reg = /表达式规则/表达式模式 ② 使用 ...

随机推荐

  1. vue2.0 实现导航守卫(路由守卫)---登录验证

    路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards). 导航守卫 ...

  2. scrapy框架--?乱码unicode

    安装 pip install scrapy 建立一个爬虫项目 scrapy startproject 项目名称 scrapy startproject itcast 进入itcast文件夹 生成一个爬 ...

  3. Python基础A(执行方式---注释)

    执行Python程序的两种方式 交互式(jupyter) 优点:运行一句,执行一句 缺点:关闭即消失 命令行式(pycharm) 优点:可以一直保存下去 缺点:全部写完才能调试bug 虽然txt问价可 ...

  4. Anaconda3(1)Windows10下安装Anaconda3(64位)详细过程

    https://blog.csdn.net/ychgyyn/article/details/82119201 前言Anaconda指的是一个开源的Python发行版本,其包含了conda.Python ...

  5. 从一段文字中提取出uri信息

    package handle.groupby; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...

  6. Quay: Introducing an Application Registry for Kubernetes

    转自: https://coreos.com/blog/quay-application-registry-for-kubernetes.html When we started Quay, we w ...

  7. Oralce 学习笔记

    1. Oracle 数据库文件后缀是什么格式? 数据文件是以oracle自定义的格式存储的,没有固定的后缀名,一般通用的为.dbf和.ora而默认是dbf的 2.Database Configurat ...

  8. 一本通 1615:【例 1】序列的第 k 个数

    传送门 我在这里! 思路 输入一个序列的前三个数并求出这个序列的第K项,这个数列不是等比序列就是等差数列,等差数列比较好判断,如果序列中\(a_{i+2}-a_{i+1}=a_{i+1}-a_{i}\ ...

  9. 深入js系列-类型(显式强制转换)

    什么是显式 这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是"显式",相反你不知道的话,对你就是"隐式" 抽象操作 字符串.数字. ...

  10. Java 抽象类 抽象方法 接口

    #抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化 ...