javascript 多物体任意运动框架

每个复杂的运动效果都是由简单的效果组成的,我们可以为简单的效果制定一个框架,也就是写一个通用函数,这样可以对元素的任何属性进行变换,复杂的效果就可以很容易实现。

注意事项:

  1. 当变换元素的透明度时,需要做特殊处理
  2. 如果变换元素宽度时,对于有border的元素,如果我们使用obj.offsetWidth来取得元素宽度时,会出现错误,因为offsetWidth包括边框。如果边框是1px,定时函数中调用,obj.style.width=obj.offsetWidth-1+‘px’;,我们会发现元素的宽度不仅没有变小,反而会变大。这也是我们使用我们自定义的getStyle()取得元素宽度的原因,而没有使用offsetWidth这一类的属性。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>New Web Project</title>
		<style>
			div{
				width:200px;
				height:200px;
				float:left;
				background:red;
				margin:10px;

			}
		</style>
		<script>
			function getStyle(obj,name)
			{
				if(obj.currentStyle)
				{
					return obj.currentStyle[name];
				}
				else
				{
					return getComputedStyle(obj,null)[name];
				}
			}
			window.onload=function(){
				var objs=document.getElementsByTagName('div');
				objs[1].onmouseover=function(){
					startMove(this,'width',400);
				};
				objs[1].onmouseout=function(){
					startMove(this,'width',200);
				};
				objs[0].onmouseover=function(){
					startMove(this,'height',400);
				};
				objs[0].onmouseout=function(){
					startMove(this,'height',200);
				};
				objs[2].onmouseover=function(){
					startMove(this,'opacity',100);
				};
				objs[2].onmouseout=function(){
					startMove(this,'opacity',30);
				};
			};

			function startMove(obj,atrr,itarget){
				clearInterval(obj.timer);
				obj.timer=setInterval(function(){
					var nowValue;
					if(atrr=='opacity')
					{
						nowValue=Math.round(parseFloat(getStyle(obj,atrr))*100);//计算机运算会有错误,需要取约数
						document.title=nowValue;
					}
					else
					{
						nowValue=parseInt(getStyle(obj,atrr));
					}

					var speed=(itarget-nowValue)/5;
					speed=speed>0?Math.ceil(speed):Math.floor(speed);
					if(nowValue==itarget)
					{
						clearInterval(obj.timer);
					}
					else
					{
						if(atrr=='opacity')
						{
							obj.style[atrr]=(nowValue+speed)/100;
							obj.style.filter='alpha(opacity:'+(nowValue+speed)+')';//IE低版本设置
						}
						else
						{
							obj.style[atrr]=nowValue+speed+'px';
						}

					}

				},30);
			}

		</script>
	</head>
	<body>
		<div></div>
		<div></div>
		<div style="opacity: 0.3; filter: alpha(opacity:30);"></div>
	</body>
</html>

运行效果图:

时间: 2024-11-08 19:36:04

javascript 多物体任意运动框架的相关文章

JavaScript模块加载框架sea.js 学习一

简单总结sea.js 学习 文件目录结构 /sea/sea.js      下载地址  http://seajs.org/docs/#downloads /sea/jquery-sea.js   下载地址 http://jquery.com/download/ /sea/sea_config.js /sea/home.jsdata.js /sea/data.js 1.html页面代码文件 <style> .ch{height:200px;width:200px;background:#ccc;

js 多物体运动框架

多物体运动框架例子:多个Div,鼠标移入biankuan 单定时器,存在问题每个Div一个定时器总结:参数问题:当运动当前的div的时候可以传参数onStart(obj,tag):obj为当前运动的div 调用时用thistag表示运动的终点距离开一个定时器(当三个div一起运动时会卡)所以利用for循环开三个定时器步骤:1.设置定时器 var timer=null:2.关闭定时器clearInterval(obj.timer);3.开启定时器:obj.timer=setInterval(fun

Javascript 多物体运动的实现

这篇文章主要介绍了Javascript 多物体运动的实现,需要的朋友可以参考下 我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题. 代码如下: 1 <style type="text/css"> 2 div { 3 width: 100px; 4 height: 50px; 5 background: red; 6 margin: 10px; 7 } 8 </style> 代码如下: 1 <body> 2 <div>&

javascript实现的运动框架详解

javascript实现的运动框架详解: 所谓的运动框架简单的说就是让元素的某一个属性值能够有渐进性的变化.运动框架的使用在实际功能中有大量的应用,最常见的比如客服系统,当拖动滚动条的时候,一般客服系统能够以弹性方式跟随,下面就简单介绍一下如何实现此效果: 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author"

JavaScript宝座:七大框架论剑

JavaScript宝座:七大框架论剑 一周前,Throne of JS大会在多伦多召开,这应该是我参加过的最有料也最不一样的一次大会.大会官网如是说: 加载整个页面,然后再“渐进增强”以添加动态行为,这种构建Web应用的方式已经不够好了.要想让应用加载快,反应灵敏,而且又引领潮流,必须彻底检讨你的开发手段. 这次大会邀请了七大JavaScript框架/库的创建人,他们济济一堂,面对面交流各自的技术理念.所谓七大框架/库分别是:AngularJS.Backbone.Batman.CanJS.Em

Javascript 链式运动框架——逐行分析代码,让你轻松了运动的原理

所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动.这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascript 代码 function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } funct

Javascript 多物体运动——逐行分析代码,让你轻松了运动的原理

我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题. <style type="text/css"> div { width: 100px; height: 50px; background: red; margin: 10px; } </style> <body> <div></div> <div></div> <div></div> </body>

Javascript库,前端框架(UI框架),模板引擎

JavaScript库:JQuery,undoscore,Zepto 纯Javascript语言封装, 前端框架(UI框架):Bootstrap,Foundation,Semantic UI,Pure.css 前端框架.UI框架,或者叫UI模板 HTML + CSS + (JavaScript)? 模板引擎: 叫HTML模板引擎?  模板文件(HTML)+(CSS)?+数据(JSON) =输入=> 模板引擎  =输出=>HTML (客户端)前端模板引擎(渲染),(服务器)后端模板引擎(渲染)

JavaScript 移动和触摸框架

jQuery Mobile : 是 jQuery 在手机上和平板设备上的版本.jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架.支持全球主流的移动平台.jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋.移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站.我们将尽全力去满足这样的需求. Sources. Zepto.js Zepto.js 是支持移动WebKit浏览器的JavaScrip