问答详情
源自:4-1 JS多物体动画

我按照老师的思路写的,内容也没区别,但是在最后obj.style.left的时候一直报错显示obj.style未定义是为什么,我代码在下面,就大神解惑

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Document</title>

<style type="text/css">



*{padding:0;margin:0;}

ul,li{

list-style:none;

}

ul li{

width:200px;

height: 100px;

background: yellow;

margin-bottom:20px;

}

</style>

<script>

window.onload=function(){



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

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

this.onmouseover=function(){

move(this,400);

}

this.onmouseout=function(){

move(this,200);

}

}}

var timer=null;

function move(obj,iTarget){

clearInterval(timer);


timer=setInterval(function(){

var speed=(iTarget-obj.offsetWidth)/2>0?Math.ceil(speed):Math.floor(speed);

if(obj.offsetWidth==iTarget){

clearInterval(timer);

}else{

obj.style.width=obj.offsetWidth+speed+'px';//这里的obj.style一直显示未定义

}

},50);

}

</script>

</head>

<body>

<ul>

<li></li>

<li></li>

<li></li>

</ul>

</body>

</html>


提问者:qq_苏慕遮_24019744 2016-10-09 10:08

个回答

  • 慕姐4093395
    2016-10-09 10:50:43
    已采纳

    参照你的代码看看,也许对你有帮助


    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style type="text/css">



    *{padding:0;margin:0;}

    ul,li{

    list-style:none;

    }

    ul li{

    width:200px;

    height: 100px;

    background: yellow;

    margin-bottom:20px;

    }

    </style>

    <script>

    window.onload=function(){
    var oLi=document.getElementsByTagName('li');

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

    oLi[i].onmouseover=function(){/*有改动*/

    move(this,400);

    }

    oLi[i].onmouseout=function(){{/*有改动*/

    move(this,200);

    }

    }}

    var timer=null;

    function move(obj,iTarget){

    clearInterval(timer);


    timer=setInterval(function(){
        var speed=(iTarget-obj.offsetWidth)/8;{<!--有改动,原来的那样写运算次序有问题-->

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

    if(obj.offsetWidth==iTarget){

    clearInterval(timer);

    }else{

    obj.style.width=obj.offsetWidth+speed+'px';//这里的obj没问题

    }

    },50);

    }

    </script>

    </head>

    <body>

    <ul>

    <li></li>

    <li></li>

    <li></li>

    </ul>

    </body>

    </html>

  • 刘颜
    2016-10-31 06:22:43

    <!DOCTYPE HTML>

    <html>

        <head>

            <meta charset="utf-8">

            <title></title>

            <style type="text/css">

                *{

                    margin: 0px;

                    padding: 0px;

                }

                ul,li{

                    list-style: none;

                }

                ul li{

                    width: 200px;

                    height: 100px;

                    background:yellow;

                    margin-bottom:20px;

                }

            </style>

            <script type="text/javascript">

                window.onload = function(){

                    var aLi = document.getElementsByTagName('li');

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

                        aLi[i].onmouseover = function(){

                            startMove(this, 400);

                        }

                        aLi[i].onmouseout = function(){

                            startMove(this, 200);

                        }

                    }

                }

                var timer = null;

                function startMove(obj, Target){

                    clearInterval(timer);

                    timer = setInterval(function(){

                        var speed = (Target - obj.offsetWidth)/8;

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

                        if(obj.offsetWidth == Target){

                            clearInterval(timer);

                        }

                        else{

                            obj.style.width = obj.offsetWidth + speed + 'px';

                        }

                    }, 30)

                }

        </script>

        </head>

        <body>

            <ul>

                <li></li>

                <li></li>

                <li></li>

            </ul>

        </body>

    </html>


  • 衣染
    2016-10-09 10:55:13

    首先。

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

    this.onmouseover=function(){


    这里就不该直接用this,而应该使用

    oLi[i].onmouseover=function(){}

    因为你遍历循环的时候没指名是哪个object在里面,所以this是属于window object。而不是具体的某个html元素。