前言

当年我学习js的时候,那时候学生时代不知道有jquery,所以手写了一些东西,留下的不多作为回忆。

正文

``` javascript
window.onload = function () {
var oBox = document.getElementById('box');
document.getElementById('btn').onclick = function () {
animate(oBox, {"z-Index":999,"opacity": 0.2,"left":"300px","height":400}) }
} /*
* json === {left : 400px,"opacity":0.3}
* key json[key]
*
* */
function animate(obj, json, callback) {
//1.清空之前的定时器
clearInterval(obj.timer); //启动定时器
obj.timer = setInterval(function () { var flag = true
for (var key in json) {
// 步长 = (目标值-当前值)/10;
var step = (parseInt(json[key]) - parseInt(getStyle(obj, key))) / 10; if (key == "opacity") {
step = (json[key] * 100 - getStyle(obj, "opacity") * 100) / 10; // 0--10
} step = step > 0 ? Math.ceil(step) : Math.floor(step); if (key == "z-Index") {
obj.style.zIndex = json[key]; } else if (key == "opacity") {
// 没有带单位操作
//新的位置=当前的位置+ 步长;
obj.style.opacity = Number(getStyle(obj, "opacity")) + (step / 100);
if (Number(getStyle(obj, "opacity")) != Number(json[key])) {
flag = false;
}
} else {
//新的位置 = 当前的位置 + 步长;
obj.style[key] = parseInt(getStyle(obj, key)) + step + "px";
if (parseInt(getStyle(obj, key)) != parseInt(json[key])) {
flag = false;
}
}
} //到达指定位置
if (flag == true) {
clearInterval(obj.timer);
if (callback) {
callback();
}
}
},40)
} // px
function getStyle(obj, attr) {
if (obj.currentStyle) {
//ie
return obj.currentStyle[attr];
}
//goole
return window.getComputedStyle(obj, null)[attr];
}

简单介绍一下原理,其实就是动态修改一下某个属性。

然后说几个注意的地方。

1.一个是一个计时器的问题,因为如果一个计时器的话,那么肯定会出现问题,所以最好这个元素自带这个计时器。

2.第二个需要注意的问题,比如说你想从位置0到200,那么你如何保证一定能够到200呢?这里面因为如果和时间相除的话,会出现一个问题,就是可能出现小数,而位置是只能精确到两位小数的,那么问题就会出现。

因为找到的是第二个版本不是最终版,所以这里没有考虑完。

3.z-Index和opacity 比较特殊需要特别考虑,同样opacity 应该考虑到ie,上面不完全,有兴趣可以补一下。

老夫当年手写的js动画库的更多相关文章

  1. 聊聊JS动画库:Velocity.js

    前言 又到了炎热的7月,很久没有更新技术文章了,原因是上月月底实习结束,从公司离职.然后最近在弄自己的项目和考驾照,为了下次公司的应聘做准备,送别了女朋友到外地,哩哩啦啦半个月把一切事情都办妥后,还是 ...

  2. 推荐 11 个好用的 JS 动画库

    为了保证的可读性,本文采用意译而非直译. 1.Three.js 超过46K的星星,这个流行的库提供了非常多的3D显示功能,以一种直观的方式使用 WebGL.这个库提供了<canvas>. ...

  3. tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。

    简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...

  4. Velocity.js动画库使用

    1.简介 Velocity 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. 2 ...

  5. 手写Koa.js源码

    用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 ...

  6. Jwalk发布——一个比较小的Js动画库

    断断续续折腾了几个晚上终于于周日把Jwalk发布了,顺便用了下yahoo的前端框架-pure css ,很简洁,非常帅.推荐使用以下. 下面说下Jwalk是做什么的: 前端开发过程中经常会用到一些动画 ...

  7. 手写Express.js源码

    上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的.但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express.通过上 ...

  8. 前端面试手写代码——JS函数柯里化

    目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...

  9. 如何手写一个js工具库?同时发布到npm上

    自从工作以来,写项目的时候经常需要手写一些方法和引入一些js库 JS基础又十分重要,于是就萌生出自己创建一个JS工具库并发布到npm上的想法 于是就创建了一个名为learnjts的项目,在空余时间也写 ...

  10. 让我们纯手写一个js继承吧

    继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...

随机推荐

  1. Java 类的内部成员之五:内部类

    1 package com.bytezreo.innerclass; 2 3 /** 4 * 5 * @Description 类的内部成员之五:内部类 6 * @author Bytezero·zh ...

  2. linux的内置crontab(定时任务)的简单介绍

    编写定时任务的基本命令: #查看当前用户的crontab crontab -l:   #编辑crontab任务 crontab -e:   #删除crontab任务 crontab -r   定时任务 ...

  3. Springboot中-全局异常处理类用法示例

    使用springboot搭建web项目的时候,一般都会添加一个全局异常类,用来统一处理各种自定义异常信息, 和其他非自定义的异常信息,以便于统一返回错误信息.下面就是简单的示例代码, 自定义异常信息. ...

  4. C#实现FTP服务端和客户端

    目录 简介 FTP客户端 系统客户端 客户端软件 自定义客户端 FTP服务端 系统服务端 服务端软件 自定义服务端 附件 简介 FTP是FileTransferProtocol(文件传输协议)的英文简 ...

  5. Android WebView获取html源码

    通过执行js语句来获取 val code = """ document.documentElement.outerHTML """.trim ...

  6. 崩溃bug日志总结3

    目录介绍 1.1 OnErrorNotImplementedException[ Can't create handler inside thread that has not called Loop ...

  7. 记录--Vue中前端导出word文件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 很多时候在工作中会碰到完全由前端导出word文件的需求,因此特地记录一下比较常用的几种方式. 一.提供一个word模板 该方法提供一个wo ...

  8. Kubernetes客户端认证(三)—— Kubernetes使用CertificateSigningRequest方式签发客户端证书

    1.概述 在<Kubernetes客户端认证(一)-- 基于CA证书的双向认证方式>和<Kubernetes客户端认证(二)-- 基于ServiceAccount的JWTToken认 ...

  9. LOTO示波器实测过压保护芯片LP5300工作效果

      过压保护电路是电子产品设置中经常要用到的,以前都是用分立元件搭的各种经典电路,最近LOTO虚拟示波器客户推荐了一款很便宜的集成的过压保护芯片LP5300,体积很小,使用简单,外接两个电容就可以了, ...

  10. KingbaseES Json 系列十一:Json数组操作函数

    KingbaseES Json 系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,J ...