前言

当年我学习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. 使用 Docker 部署 GLPI 资产管理系统

    1)GLPI 介绍 GLPI 简介 参考: https://github.com/glpi-project/glpi 官方文档:https://glpi-project.org/documentati ...

  2. Github下载release附件变相提速方法

    最近找到了个油猴插件,下载2M/s,推荐大家使用Github 镜像访问,加速下载 描述 github上面有许多开源的软件,作者们都打包发布为release版本,我们可以下载打包好的软件,但是,由于国内 ...

  3. [置顶] cas单点登录出现的重定向循环问题解决方案

    先描述下出现的问题,截图如下: 出现该问题的原因可以通过F12查看Network找到,即http和https两个协议开头的url在不停的跳转,最后就出现了上图所示的重定向循环错误,导致页面崩溃. 解决 ...

  4. jsp转换成html

    相信很多人都希望自己的页面越快越好,最好是能静态的,提高客户访问速度.也便于搜索引擎搜索.所以,就希望我们的动态读取数据库的页面,尽可能的生成静态页面.一下系列文章,介绍一下个人的解决方案.      ...

  5. View事件机制源码分析

    目录介绍 01.Android中事件分发顺序 02.Activity的事件分发机制 2.1 源码分析 2.2 点击事件调用顺序 2.3 得出结论 03.ViewGroup事件的分发机制 3.1 看一下 ...

  6. 记录--使用 JS 实现基本的截图功能

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 思路分析 在开始动手之前,分析一下整个功能的实现过程: 根据图片大小创建 canvas1 画布,并将原图片直接定位在 canvas1 上: ...

  7. 记录--前端加载超大图片(100M以上)实现秒开解决方案

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 前端加载超大图片时,一般可以采取以下措施实现加速: 图片压缩:将图片进行压缩可以大幅减小图片的大小,从而缩短加载时间.压缩图片时需要 ...

  8. 记录--千万别让 console.log 上生产!用 Performance 和 Memory 告诉你为什么

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 很多前端都喜欢用 console.log 调试,先不谈调试效率怎么样,首先 console.log 有个致命的问题:会导致内存泄漏. 为什 ...

  9. clickhouse在各大厂商的应用

    案例-ClickHouse在头条的技术演进

  10. replace小数点后保留2位

    小数点后保留2位 网上一堆小数点保留2位正则,但大部分都是直接copy,未解决0101和以.开头的这种情况 网上写法 obj.value = obj.value.replace(/[^\d.]/g,& ...