到达容器边缘时进行div移动和反弹

时间:2014-12-31 02:44:16

标签: javascript html

我尝试进行div移动并且一旦到达容器边缘div我就会使用此代码执行此操作,但调试器显示'这个错误Cannot read property 'offsetWidth' of undefined

var speed = 10,
     direction = 1;

     var ballElement = document.getElementsByClassName('ball'),
         containerElement = document.getElementsByClassName('mainDiv');
     if (ballElement) {
        var boxLeftPos = ballElement.offsetLeft,
            boxRightPos = boxLeftPos + ballElement.offsetWidth;

            if (boxRightPos > document.containerElement.offsetWidth) {
                direction = -1;
            }

            if (boxLeftPos < 0) {
                direction = 1;
            }

            ballElement.style.left = (boxLeftPos + speed * direction) + 'px';
     }  

错误在这一行:

if (boxRightPos > document.containerElement.offsetWidth)

LIVE DEMO

3 个答案:

答案 0 :(得分:2)

getElementsByClassName返回一个数组。如果您只有该类的一个元素,请添加[0]以检索它:getElementsByClassName('ball')[0]

document.

中删除if (boxRightPos > document.containerElement.offsetWidth) {

工作演示:http://jsfiddle.net/7rw1t8eh/

答案 1 :(得分:1)

document.containerElement未定义它应该只是containerElement的外观

答案 2 :(得分:1)

document.getElementsByClassName的结果是nodeList个对象。因此,它没有offsetWidth或样式。您可以改为使用document.querySelector('.ball'),或使用containerElement[0]