1

创建手风琴 - 在幻灯片上 - 正在滑动的元素下方的元素似乎会向下移动 px,然后再向上移动,从而产生抖动效果。

$(document).ready(function() {

//Promos banners rotation and accordion
$(function(){
    var $accordionList = $('.accordion').find('li');
    var numberOfItems = $accordionList.length;
    var currentItem = 0;

    // Set first item to active
    $accordionList.eq(currentItem).addClass('active').find('.content').slideToggle(800, function() {});

    // Loops through promos
    var infiniateLoop = setInterval(function() {

        if(currentItem == numberOfItems - 1){
            currentItem = 0;
        }
        else {
            currentItem++;
        }

        // Remove active class, if is has it, and close content
        $accordionList.parent().find('li.active').removeClass('active')
            .find('.content').slideToggle(800, function() {
        });

        // Add active class and open content
        $accordionList.eq(currentItem).addClass('active').find('.content').slideToggle(800, function() {
        });

    }, 4000 );

    // Click to show promo
    $accordionList.on('click', function () {
        // Stop rotation
        clearInterval(infiniateLoop);

        var $accordionHead = $(this);

        // Remove active class, if is has it, and close content
        if($accordionHead.hasClass('active')) {
            // Do nothing
        }
        else {
            $accordionHead.parent().find('li.active').removeClass('active')
                .find('.content').slideToggle(800, function() {
            });

            // Add active class and open content
            $accordionHead.addClass('active').find('.content').slideToggle(800, function() {
            });
        };
    });
});

});

Fiddle here展示了问题

我已经看到一些建议您修复内容 div 的高度 - 但该网站是响应式的,因此无法正常工作。

4

1 回答 1

0

是的,我以前遇到过这个问题。我最喜欢的解决方法是自己制作.slideToggle()

div = $('div');
height = div.height();
width = div.width();

$('div').click( function() {
  if ($(this).hasClass('hidden')) {
    $(this).animate({height: "0", width: "0"}, 200).hide().addClass('hidden');
  } else {
    $(this).animate({height: height, width: width}, 200).show().removeClass('hidden');
  }
});

如果您愿意,您甚至可以将其包装在原型函数中。

于 2013-01-08T18:31:05.413 回答