Jquery动画仅适用于一个元素

时间:2014-07-07 10:15:27

标签: javascript jquery animation jquery-animate

  • 该功能可以停止淡入淡出的图像。
  • 现在,只适用于第二个元素(div.logo),我怎样才能使它适用于两个或多个元素?

我想我应该在结果列表中获取每个元素的边框。如何?

非常感谢任何帮助

演示:http://jsfiddle.net/2ZxwY/

JS:

function displayThese(selectorString) {
    var $heading = $(selectorString);
    var h1top = $heading.position().top;
    var h1bottom = h1top + $heading.height();
    var h1left = $heading.position().left;
    var h1right = h1top + $heading.width();

    var divs = $('li').filter(function () {
        var $e = $(this);
        var top = $e.position().top;
        var bottom = top + $e.height();
        var left = $e.position().left;
        var right = left + $e.width();

        return top > h1bottom || bottom < h1top || left > h1right || right < h1left;
    });
    return divs;
}

(function fadeInDiv() {
    var divsToChange = displayThese('h1, div.logo');
    var elem = divsToChange.eq(Math.floor(Math.random() * divsToChange.length));
    if (!elem.is(':visible')) {
        elem.prev().remove();
        elem.animate({
            opacity: 1
        }, Math.floor(Math.random() * 1000), fadeInDiv);
    } else {

        elem.animate({
            opacity: (Math.random() * 1)
        }, Math.floor(Math.random() * 1000), function () {
            window.setTimeout(fadeInDiv);
        });
    }

})();

$(window).resize(function () {
    // Get items that do not change    
    var divs = $('li').not(displayThese());
    divs.css({
        opacity: 0.3
    });
});

1 个答案:

答案 0 :(得分:1)

首先,您应该在文档加载结束时执行fadeInDiv()函数,因为在您的小提琴中,位置计算为内联(所有'li'的顶部和底部相同)。

另一方面,当获取选择器的位置和尺寸时,它采用第一个元素的属性。所以它不适用于你的例子。您只需要传递一个元素。

你需要做的是迭代匹配selectorString的元素,过滤那些不在其后面的“li”元素列表。

function displayThese(selectorString) {
    var divs = $('li');

   // iterate through elements in selector filtering <li> elements
   $(selectorString).each( function( index, value ) {
       var $heading = $(this);
       var h1top = $heading.position().top;
       var h1bottom = h1top + $heading.height();
       var h1left = $heading.position().left;
       var h1right = h1top + $heading.width();   

     divs = divs.filter(function () {
         var $e = $(this);
         var top = $e.position().top;
         var bottom = top + $e.height();
         var left = $e.position().left;
         var right = left + $e.width();

         // return just the elements non touching the selectors
         return !(top < h1bottom && bottom > h1top && 
                 left < h1right && right > h1left);
     });
 });

  return divs;
}

在调整大小时,您必须停止当前动画并再次启动淡入淡出方法:

$(window).resize(function () {    
    $('li').stop();
    $('li').css("opacity", "0.3");
    fadeInDiv();    
});

以下是此

fiddle