javascript-运动-运动框架

总结一下现在学习到的javascript运动框架,先列出一些问题及解决方法吧

1 运动不会停止

  添加if判断,当到达你要的目标就会停止

  if (var == target) { //清空定时器 }

 

2 对于问题1扩展 当添加if相等时,可能不会正好相等,会大于等于或小于等于

  if ( var >= target  ) { //清空定时器 }

 

3 当完成1或2的条件停止时,在出发相应事件会继续往前动

  因为if判断执行后清空定时器,但是定时器后面的语句仍然执行了,这里后面加上else,当到达临界条件,执行清空定时器,否则就执行运动

  if ( var >= target  ) {

   //清空定时器

  } else {

   // 运动代码

  }

4 当多次出发运动事件时,会产生加速效果

  因为多次出发时,开了多个定时器,就开始叠加递增或递减

  运动框架出发前清空定时器

  function startMove () {

    clearInterval(timer);

    timer = setInterval(function () {

    },100);

 }

 

5 封装到一个运动函数中,运动中肯定有相反运动,向左或者像右,向上或者向下

  即传入一个target目标值,即大于目标值,取负值,小于目标值的的时候取正值

  if(iCur < target) {

  speed = -5;

  } else {

  speed = 5;

  }

 

6 高级一点的,前面的都是一个运动项目在发生运动,当多个项目发生运动时呢

  这里就用到前面所学的知识,当需要一一对照时,加上索引或者属性,这里以我写的一个多框透明度变化为例,

  为每一个框加上timer属性和alpha透明值属性,这样他们就各自拥有了timer定时器引用和alpha透明值属性了。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <meta name="generator" content="editplus" />
  <meta name="author" content="han" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <title> js实现同一个页面多个渐变效果 </title>
  <style>
    body,ul { margin:0; padding:0;}
    ul { list-style:none;}
    li { width:100px; height:100px; background:blue; float:left; margin-left:10px; filter:alpha(opacity=30); opacity:0.3;}
  </style>
  <script>
//  要点:
//    allBox[i].timer = null;
//    allBox[i].alpha = 30; 
//    每一个运动框都添加了两个属性,一个timer计时器属性和alpha透明度属性,他们计时器和透明度分开
    window.onload = function () {
        var boxWrap = document.getElementById('box'),
            allBox = boxWrap.getElementsByTagName('li'),
            len = allBox.length,
            i;

        for (i=0; i<len; i++) {
            allBox[i].timer = null;
            allBox[i].alpha = 30;
            allBox[i].onmouseover = function () {
                startRun(this,100);
            };
            allBox[i].onmouseout = function () {
                startRun(this,30);
            };
        }

//        function startRun (obj, nTarget) {
//            clearInterval(obj.timer);
//            obj.timer = setInterval(function () {
//                    
//                var speed = 0;
//
//                if (obj.alpha < nTarget) {
//                    speed = 5;
//                } else {
//                    speed = -5;
//                }
//                if (obj.alpha === nTarget) {
//                    clearInterval(obj.timer);
//                }else{
//                    obj.alpha += speed;
//                    obj.style.opacity = obj.alpha/100;
//                    obj.style.filter = 'alpha(opacity:'+obj.alpha+')';
//                }
//
//            },30);
//        }

        //思考用自己以前的想法怎么实现
        function startRun (obj, nTarget) {
            clearInterval(obj.timer);
            var iCur = css(obj,'opacity')*100;
            obj.timer = setInterval(function () {

                var speed = (nTarget - iCur)/8;
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                
                if (iCur === nTarget) {
                    clearInterval(obj.timer);
                } else {
                    iCur += speed;
                    obj.style.opacity = iCur/100;
                    obj.style.filter = 'alpha(opacity:'+iCur+')';
                }

            },100);
        }
    


        function css (obj, attr) {
            if (obj.currentStyle) {
                return obj.currentStyle['opacity'];
            } else {
                return getComputedStyle(obj,false)[attr];
            }
        }
    }
  </script>

 </head>

 <body>
    <ul id="box">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
  
 </body>
</html>

 

 

  

 

  

posted @ 2012-08-01 19:28  zzu-han  阅读(1418)  评论(0编辑  收藏  举报