在最后完成move.js后,之前的不同步的效果不能用这个实现了呢?

来源:6-2 完美运动框架

想幸福像花儿一样

2015-01-16 10:41

在完成最后的这个move.js后,我将之前的顺序改变效果的代码改成了这样,但是只能完成第一个效果,是不是相当于已经实现了到目标,后面的就不执行了?怎么改呢?既能实现同步的也能实现不同步的?

Li.onmouseover = function(){

startMove(Li,{width:400},function(){

startMove(Li,{height:200},function(){

startMove(Li,{opacity:100});

});

});

}


写回答 关注

5回答

  • 丿丫丫
    2015-04-11 19:11:16

    startMove(Li,{"width":400},function(){         这里的width要加双引号。。。

  • 张灏哲
    2015-02-15 01:51:01

    function moveStart(obj, json, fn) {

    //json = {name:value}

    //json要用for in 函数--->for(var i in json){ name==i;  value == json[i] }

    var flag = true; //假设所有运动都达到目标值

    clearInterval(obj.timer);

    // var aLi = document.getElementsByTagName("li");

    //obj是实参传来的this,所以这里不再需要获取对象


    obj.timer = setInterval(function() {

    //1、获取值

    for (var attr in json) {

    var icren = 0;


    if (attr == "opacity") {

    icren = Math.round(parseFloat(getStyle(obj, attr)) * 100);

    } else {

    icren = parseInt(getStyle(obj, attr));

    } //2、计算速度

    var speed = (json[attr] - icren) / 10;

    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);


    //3、判断是否达到目标

    if (icren != json[attr]) {

    // alert(flag);

    flag = false;

    // clearInterval(obj.timer);

    }

    else{

    flag = true;

    // alert(flag);

    }

    //for in 循环执行json时,是将json的属性全部遍历结束之后跳出循环

    //4、执行计算


    if (attr == "opacity") {

    obj.style[attr] = (icren + speed) / 100;

    obj.style[filter] = "alpha(opacity:" + (icren + speed) + ")";

    } else {

    obj.style[attr] = icren + speed + "px";

    }

    }

    if (flag) {

    alert("ok");

    clearInterval(obj.timer);

    if (fn) {

    fn();

    }

    }


    }, 30);

    }


    function getStyle(obj, attr) {

    if (obj.currentStyle) {

    return obj.currentStyle[attr];

    } else {

    return getComputedStyle(obj, false)[attr];

    }

    }


    这样就可以使用function(){}了,但是要是你传入的obj的实参是this,function中不可以再传入this,最好把this赋值给变量。以下是代码:


    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="utf-8">

    <title></title>

    <style>

    *{

    margin: 0;

    padding: 0;

    }

    li{

    list-style: none;

    width: 200px;

    height: 100px;

    background-color: goldenrod;

    opacity: 0.3;

    border: 2px solid black;

    }

    </style>

    <script src="js/move.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript">

    window.onload = function(){

    var oLi = document.getElementsByTagName("li");

    // alert(oLi.length);

    for(var i = 0;i<oLi.length;i++){

    // alert("test");

    oLi[i].timer = null;

    oLi[i].onmouseover = function(){

    var test = this;

    moveStart(test,{width:202,height:200}

    //  ========== 

    //  = moveStar(this,...)中,this不可以用oLi[i]这个对象????=

    //  ========== 

    ,function(){

    moveStart(test,{opacity:100});

    }

    );

    }

    oLi[i].onmouseout = function(){

    moveStart(this,{width:200,height:100});

    }

    }

    }

    </script>

    </head>

    <body>

    <li></li>

    <li></li>

    <li></li>

    <li></li>

    </body>

    </html>


    区域中的?号注释块是我也不太明白的地方,望高手解答

    七月小麦麦

    能请问一下问什么不能再用this了吗?

    2015-06-18 10:40:13

    共 2 条回复 >

  • 张灏哲
    2015-02-15 00:58:04

    是的,我也发现了,正在分析,是由于flag一直是false,无法进入最后的判断,对json了解不是很透彻。

    七月小麦麦

    求教,我还是没能解决这个问题

    2015-06-18 00:30:15

    共 1 条回复 >

  • 浙江wolverine
    2015-01-29 21:48:30

    遇到同样问题 求指教

  • luocaihuang
    2015-01-16 11:01:58

    呵呵 学习了

    想幸福像花儿...

    ?什么意思?

    2015-01-16 11:52:04

    共 1 条回复 >

JS动画效果

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

113925 学习 · 1443 问题

查看课程

相似问题