前言

当年我学习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. 复习精简版快速学vue3

    vue2中.如果给一个之前没有定义的属性赋值,会得不到时实更新: this.obj.b=2 //由于这个属性之前没有定义,是不支持动态响应,只能用this.$(this.obj,'b',2)也就是说v ...

  2. 基于RocketMQ实现分布式事务(半消息事务)

    一.背景 RocketMQ的分布式事务可以称为"半消息事务". 二.原理 2.1原理 RocketMQ是靠半消息机制实现分布式事务: 事务消息:MQ 提供类似 X/Open XA ...

  3. Zabbix6.0使用教程 (一)—zabbix新增功能介绍2

    上一篇我们已经介绍了部分zabbix6.0的新增功能,这期我们将继续为家详细介绍下余下的zabbix6.0新增功能,大家可以往下看. 六.监控项 6.1 自动类型选择 监控项配置表单会自动建议匹配的信 ...

  4. PE文件手工压缩

    序 本文要压缩的PE文件来自软件漏洞这门课上布置的作业,代码逻辑很简单,直接运行就能看出来,就是调库来弹两个对话窗口.笔者主要记录一下对这个文件的分析和一步步实现手工压缩的过程.在此提供原文件的下载方 ...

  5. Rabbit算法:轻量高效的加密利器

    Rabbit算法起源: Rabbit算法是由Martin Boesgaard和Mette Vesterager提出的一种流密码算法,其设计初衷是为了提供高性能和高度安全性的加密方案.Rabbit算法结 ...

  6. linux脚本免密的方法/不用输入密码

    第一种方法:使用管道(上一个命令的 stdout 接到下一个命令的 stdin):在脚本首行添加 #!/bin/bashecho password | sudo -S apt-get update 第 ...

  7. Windows 2012 R2 修复CredSSP 远程执行代码漏洞 CVE-2018-0886

    本文基于window 2012 R2版本,各位参考下载自己版本对应的补丁包即可 说明 公司的安全性检查,需要修复服务器上的漏洞,其中有个漏洞是CVE-2018-0886,结果网上的资料和一番折腾,终于 ...

  8. java多线程的锁整理

    参考,欢迎点击原文:https://www.jianshu.com/p/473a3d96a1b0(java锁总结) https://www.jianshu.com/p/dcabdf695557(Ree ...

  9. java项目打包成jar包

    参考,欢迎点击原文:https://www.bilibili.com/video/BV16K411H7Tt?from=search&seid=12445640905127816624(B站) ...

  10. Bitmap优化详谈

    目录介绍 01.如何计算Bitmap占用内存 1.1 如何计算占用内存 1.2 上面方法计算内存对吗 1.3 一个像素占用多大内存 02.Bitmap常见四种颜色格式 2.1 什么是bitmap 2. ...