运动的两种形式

1 基于位移版的缓冲运动,

存在问题,

 1{} 里面,运动变量有大有小时,运动效果体验差

 2缩小浏览器时,因为定时器运动变得缓慢,所以打开,才再次运动

    	
                 function move(obj, json, fn) {
			clearInterval(obj.timer);
			obj.timer = setInterval(function() {
				var bStop = true;
				for (var attr in json) {
					var iCur = 0;
					//。获取对象的初始属性,对透明度作特别处理
					if (attr == 'opacity') {
						iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
					} else {
						iCur = parseInt(getStyle(obj, attr));
					}
					//计算速度,目标减去初始除上8,8为自定义的值,经过实践
					var iSpeed = (json[attr] - iCur) / 8;
					iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
					//停止开关,当没达到目标时,为停止状态
					if (iCur != json[attr]) {
						bStop = false;
					}
					if (attr == 'opacity') {
						obj.style.filter = 'alpha(opacity=' + (iCur + iSpeed) + ') ';
						obj.style.opacity = (iCur + iSpeed) / 100;
					} else {
						obj.style[attr] = iCur + iSpeed + 'px';
					}
				}
				//当为TRUE时,开关打开,如有回调函数,就使用回调函数
				if (bStop) {
					clearInterval(obj.timer);
					if (fn) {
						fn.call(obj)
					}
				}
			}, 30)
		}
		function getStyle(obj, attr) {
			if (obj.currentStyle) {
				return obj.currentStyle[attr];
			} else {
				return getComputedStyle(obj, false)[attr];
			}
		}

2 时间版,引用Tween.

<!doctype html>
<html>
<head lang="zh">
    <meta charset="utf-8">
    <title>灵域</title>
    <meta name="renderer" content="webkit">
    <script>
   //t 时间变化量time,B初始量 begin,C变化量change,D,时间duraction
		var Tween = {
                        linear:function(t,b,c,d){
				return t*c/d+b;
			},
			easeIn:function(t,b,c,d){
				return c*(t/=d)*t+b;
			}

		}

    	function move(obj, json,times,fx, fn) {

			clearInterval(obj.timer);

			var iCur = {};

			var startTime = now();

			for(var attr in json){

				if (attr == 'opacity') {

						iCur[attr] = parseInt(parseFloat(getStyle(obj, attr)) * 100);

					} else {

						iCur[attr] = parseInt(getStyle(obj, attr));
					}

			}

			obj.timer = setInterval(function() {

				var changeTime = now();

				//

			    var t = times  - Math.max(0,startTime- changeTime+times);

				for (var attr in json) {

					var value = Tween[fx](t,iCur[attr],json[attr]-iCur[attr],times);

					//console.log(value);
					
					if (attr == 'opacity') {

						obj.style.filter = 'alpha(opacity=' + value + ') ';

						obj.style.opacity = value / 100;

					} else {

						obj.style[attr] = value + 'px';
					}
				}

				if (t==times) {

					clearInterval(obj.timer);

					if (fn) {

						fn.call(obj)
					}
				}

			}, 13)
		}


		function getStyle(obj, attr) {

			if (obj.currentStyle) {

				return obj.currentStyle[attr];

			} else {

				return getComputedStyle(obj, false)[attr];
			}
		}


		function now(){

			return new Date().getTime();
		}

		window.οnlοad=function(){

			var oDiv = document.querySelector('#div1');

			oDiv.οnmοuseοver=function(){

				move(this,{left:800},2000,'easeIn',function(){
					alert(1);
				})

			}



		}
    </script>
<style>
#div1{width:100px; height:100px; background:green; border:1px solid #000;position: absolute;left:400px; top:80px;}

</style>
</head>
<body >
<div id="div1"></div>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值