模拟CSS3 多组位移运动属性的框架封装
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 多组位移运动属性的框架封装的更多相关文章
- CSS3中transform几个属性值的注意点
		
transform(变形)是CSS3中的元素的属性,transform的属性值主要包括旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix 基本用法可以参考文 ...
 - CSS3让文本自动换行——word-break属性
		
1.依靠浏览器让文本自动换行 浏览器本身都自带着让文本自动换行的功能. 2.指定自动换行的处理方法 在CSS3中,可以使用word-break属性来自己决定自动换行的处理方法. div{ word-b ...
 - CSS3中和动画有关的属性transform、transition 和 animation
		
CSS3中和动画有关的属性有三个 transform. transition 和 animation.下面来一一说明: transform 从字面来看transform的释义为 ...
 - JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语
		
4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms Mem ...
 - JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C
		
3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...
 - JZOJ 3508. 【NOIP2013模拟11.5B组】好元素
		
3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms Mem ...
 - JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密
		
272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms M ...
 - CSS3 animation(动画) 属性
		
一.animation 1.CSS3 animation(动画) 属性 语法: animation: name duration timing-function delay iteration-cou ...
 - 利用css3的多背景图属性实现幻灯片切换效果
		
css3里关于背景的属性增加了可以添加多背景图的特性,例如: .box{background: url(img/1.png),url(img/2.png),url(img/3.png);} 这段css ...
 
随机推荐
- UVA 1401  Remember the Word
			
字典树优化DP Remember the Word Time Limit: 3000MS Memory Limit: Unknown ...
 - Hibernate连接mysql数据库的配置
			
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...
 - C和指针 第十五章 二进制I/O
			
二进制I/O 数据写入到文件效率最高的是用二进制形式写入,二进制输出避免了在数值转换为字符串过程中,所涉及的开销和精度损失,但而精致并非人眼所能阅读,所以这个技巧只有当数据被另一个程序按顺序读取才能使 ...
 - 预处理命令[#define]说明
			
宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只 ...
 - C#数字日期装换为中文日期
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
 - 51. 顺时针打印矩阵[print matrix in clockwise direction]
			
[本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...
 - 修改jetty的默认端口号
			
jetty默认端口是8080,修改端口号也很简单,首先进入到jetty服务器安装目录下会看到start.ini配置文件,这里就是jetty启动时加载的配置,其中包括要加载的模块,超时时间配置还有这里的 ...
 - spring定时任务详解(@Scheduled注解)( 转 李秀才的博客 )
			
在springMVC里使用spring的定时任务非常的简单,如下: (一)在xml里加入task的命名空间 xmlns:task="http://www.springframework.or ...
 - $.extend()、$.fn和$.fn.extend()
			
理解$.extend().$.fn和$.fn.extend() 原文链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.ht ...
 - ASP.NET获取百度地图提供的API接口里面的JSON
			
思路:开始是想直接在前台获取,但是跨域访问还是有点难度,而且格式必须是josnp格式的,最后嫌麻烦,不得已放弃. 我做的ASP.NET 而这个有自带的解析类,直接引用就行了 先在后台获取到JOSN: ...