obj是将要运动的对象,json是运动完成时的位移结果。

封装要点:

  1.定时器开关flag的定义要放在for in结构的外面,否则,每遍历一次,都会定义一个 新的flag

  2.if(current != json[attr]) {     flag = false;  }要放到遍历的里面,因为定时器每运行一次,都要判断一下是否到达终点

  3.if(flag == false) {clearInterval(obj.timer)}放到遍历结构的外面,当所有的位移都达到json给的数值的时候,才关闭定时器。否则,只有一个json[attr]达到位移终点时,定时器就会关闭,此时,可能别的位移还没有到达json数据给的终点。

    function animate(obj,json){
clearInterval(obj.timer);
var flag = true;
obj.timer = setInterval(function (){
for (var attr in json) {
// var current = parseInt(getCss(obj,attribute))
// getCss(obj,attr)中的attr是从json中获取到的,因此不能用attribution了
var current = parseInt(getCss(obj,attr));
var step = (json[attr] - current) /10;
step = step >0 ? Math.ceil(step) : Math.floor(step);
// obj.style[attr] = parseInt(getCss(obj,attr)) + step + 'px' ;
obj.style[attr] = current + step + 'px' ;
if(current != json[attr]) {
flag = false;
}
}
},30);
if(flag == false) {clearInterval(obj.timer)} }

  案例

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
div {
width: 100px;
height: 100px;
background-color: pink;
position: absolute;
left: 0;
opacity: 0.3;
}
</style>
</head>
<body>
<button id="btn200">200</button>
<button id="btn400">400</button>
<div id="box"></div>
</body>
</html>
<script>
var btn200 = document.getElementById("btn200");
var btn400 = document.getElementById("btn400");
var box = document.getElementById("box");
btn200.onclick = function() {
animate(box,{top: 300,height:200,width : 600});
}
btn400.onclick = function() {
animate(box,{top: 100,height:500,width : 300});
} function animate(obj,json){
clearInterval(obj.timer);
var flag = true;
obj.timer = setInterval(function (){
for (var attr in json) {
// var current = parseInt(getCss(obj,attribute))
// getCss(obj,attr)中的attr是从json中获取到的,因此不能用attribution了
var current = parseInt(getCss(obj,attr));
var step = (json[attr] - current) /10;
step = step >0 ? Math.ceil(step) : Math.floor(step);
// obj.style[attr] = parseInt(getCss(obj,attr)) + step + 'px' ;
obj.style[attr] = current + step + 'px' ;
if(current != json[attr]) {
flag = false;
}
}
},30);
if(flag == false) {clearInterval(obj.timer)} }
function getCss(obj,attribute) {
if(obj.currentStyle) {
return obj.currentStyle[attribute];}else {
return window.getComputedStyle(obj,null)[attribute];}
}
</script>

  

模拟CSS3 多组位移运动属性的框架封装的更多相关文章

  1. CSS3中transform几个属性值的注意点

    transform(变形)是CSS3中的元素的属性,transform的属性值主要包括旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix 基本用法可以参考文 ...

  2. CSS3让文本自动换行——word-break属性

    1.依靠浏览器让文本自动换行 浏览器本身都自带着让文本自动换行的功能. 2.指定自动换行的处理方法 在CSS3中,可以使用word-break属性来自己决定自动换行的处理方法. div{ word-b ...

  3. CSS3中和动画有关的属性transform、transition 和 animation

    CSS3中和动画有关的属性有三个  transform. transition 和 animation.下面来一一说明:        transform     从字面来看transform的释义为 ...

  4. JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语

    4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms  Mem ...

  5. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  6. JZOJ 3508. 【NOIP2013模拟11.5B组】好元素

    3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms  Mem ...

  7. JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密

    272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms  M ...

  8. CSS3 animation(动画) 属性

    一.animation 1.CSS3 animation(动画) 属性 语法: animation: name duration timing-function delay iteration-cou ...

  9. 利用css3的多背景图属性实现幻灯片切换效果

    css3里关于背景的属性增加了可以添加多背景图的特性,例如: .box{background: url(img/1.png),url(img/2.png),url(img/3.png);} 这段css ...

随机推荐

  1. tyvj1468 清理垃圾

    背景 聚会结束,留下许多垃圾.Candy:"好多垃圾啊,飘飘乎居士,我们一起处理垃圾吧!" 描述     Candy家里总共有n个垃圾等待处理,每个垃圾对于Candy和飘飘乎居士处 ...

  2. 【IOS】模仿windowsphone列表索引控件YFMetroListBox

    有没有觉得UITableView自带的右侧索引很难用,我一直觉得WindowsPhone中的列表索引非常好用. 所以呢,我们来实现类似Windows Phone中的列表索引(这就是信仰). 最终实现效 ...

  3. 如何在centos下部署Node环境

    从今年开始,养车之家的PC 和 M端 的站点 ,服务器从tomcat全部改成了Node,无论在测试环境.准生产.正式环境,我们都需要在服务器进行Node的部署,在这里我给大家详细说明下Node在lin ...

  4. Asp.Net Core--发布到IIS

    翻译如下: 支持的操作系统 Windows 7及更高版本 Windows Server 2008 R2及更高版本 概念上,本文档中描述的IIS配置也适用于在Nano Server IIS上托管ASP. ...

  5. MySQL 备份与恢复

    一.备份/恢复策略 考虑因素有: (A) 表的存储引擎是否事务性的,在数据一致性方面不太一样. (B) 确定是全备份还是增量备份, (C) 考虑采取复制的方法做异地备份,复制不能代替备份 (D) 定期 ...

  6. c#过滤html标签

    public string HtmlFilter(string html)     {         //设置要删除的标记         string[] lable = { "font ...

  7. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  8. final和包装类

    ==================================================================================================== ...

  9. paxos(chubby) vs zab(Zookeeper)

    参考: Zookeeper的一致性协议:Zab Chubby&Zookeeper原理及在分布式环境中的应用 Paxos vs. Viewstamped Replication vs. Zab ...

  10. MySQL 5.6 OOM 问题解决分享【转】

    本文来自:杨德华的原创分享 | MySQL 5.6 OOM 问题解决分享 延伸阅读:Linux的内存回收和交换 当遇到应用程序OOM的时候,大多数时候只能用头疼来形容,应用程序还可以通过引流来临时重启 ...