处理多个setInterval调用



我有麻烦的工作,如何创建一个简单的弹出和拖放效果的类div。由于该类中每个项的onmouseover事件当前都在调用相同的函数,因此在div之间快速滑动会使前一个div卡在中间(如果从div的底部打开和关闭鼠标,您将看到我试图产生的效果)。

我目前的方法还要求我复制相当多的代码来从每个div的事件处理程序中调用函数,所以如果有一种方法可以将它们包装成一个函数,我真的很想知道如何。我相信有一个简单而有效的方法可以做到这一切,只是似乎没有办法。

jsFiddle例子: http://jsfiddle.net/DvXDb/

下面是我的代码(脚本在底部):
div.bouncer{
       position:relative;
        top:50px;
    }


    function next(elem) {
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    }
    var thisDiv; var nextDiv; var selDiv;
    var containerDivList = document.getElementsByClassName("container");
    var containerArray = Array.prototype.slice.call(containerDivList);
    var container1 = containerArray[0];
    var container2 = containerArray[1];
    var container3 = containerArray[2];
    var container4 = containerArray[3];
    container1.onmouseover = function () {
        callPop(this.getElementsByTagName('div')[0]);
    }
    container1.onmouseout = function () {
        callDrop(this.getElementsByTagName('div')[0]);
    }
    container2.onmouseover = function () {
        callPop(this.getElementsByTagName('div')[0]);
    }
    container2.onmouseout = function () {
        callDrop(this.getElementsByTagName('div')[0]);
    }
    container3.onmouseover = function () {
        callPop(this.getElementsByTagName('div')[0]);
    }
    container3.onmouseout = function () {
        callDrop(this.getElementsByTagName('div')[0]);
    }

    var relativeHeights = ['0px', '5px', '10px', '15px', '20px', '25px', '30px', '35px', '40px', '45px', '50px'];
    var index = 10;
    var intervalHandle1;
    function callPop(thisDiv) {
        clearInterval(intervalHandle1);
        selDiv = thisDiv;
        intervalHandle1 = setInterval(popImage, 5);
    }
    function callDrop(thisDiv) {
        clearInterval(intervalHandle1);
        selDiv = thisDiv;
        intervalHandle1 = setInterval(dropImage, 5);
    }
    function popImage() {
        selDiv.style.top = relativeHeights[index];
        index--;
        if (selDiv.style.top === '0px') {
            index = 0;
        }
    }
    function dropImage() {
        index++;
        selDiv.style.top = relativeHeights[index];
        if (selDiv.style.top === '50px') {
            index = 10;
        }
    }

这是一个使用jQuery的例子,你真的应该使用一个框架来做这样的事情。他们简化了一切。

http://jsfiddle.net/AEJY9/

$(function () {
$('.bouncer').hover(
  function () {
    $(this).stop().animate({
      top: 10
      }, 500);
  },
  function () {
    $(this).stop().animate({
      top: 50
      }, 500);
  }
);

});

相关内容

  • 没有找到相关文章