-1

所以,

if($(this).hasClass('active')){             
    $(this).removeClass('active');
    $(this).prev().addClass('active');                  
}

工作正常,它将“活动”类添加到以前的同类 div 中。

if($(this).hasClass('active')){
    $(this).removeClass('active');
    $(this).next().addClass('active');
}

但是,将类添加到下一个 div(正如我打算这样做的那样)大约 0.5 秒,然后将其删除。

这是所有 jQuery(根据您在下面的评论) - 请不要评论我可怕的代码组织

$(window).load(function () {

    // Initial variables
    var numberSlides = 0;
    var currentSlide = 1;
    var ready = true;
    var pageWidthR = $(document).width() - 352;
    var pageWidthL = $(document).width() - 352;

    // Update number of slides by number of .slide elements
    $('#features-slider .slide').each(function () {
        numberSlides++;
    });

    // Go through each slide and move it to the left of the screen
    var i = 0;

    $($('#features-slider .slide').get().reverse()).each(function () {

        if (i == 0) {

        } else {
            var newWidth = i * 115;
            $(this).css('left', '-' + newWidth + '%');
        }

        i++;

    });

    // Animate the first slide in
    $('#features-slider .slide:last-child').addClass('active').animate({
        left: 0
    }, 1500);

    // Remove the loading message
    $('#loading').fadeOut(1000, function () {
        $('#loading').remove();

        // Now that we're done - we can show it
        $('#features-slider').show();
    });

    /***** Left and Right buttons *****/

    /* Right */
    $('#rightbutton').click(function () {

        var numberSlides = 0;
        $('#features-slider .slide').each(function () {
            numberSlides++;
        });

        var index = $('.slide.active').index() + 1;

        if (!$('.slide').is(':animated') && index != 1) {

            $('#features-slider .slide').each(function () {


                if ($(this).hasClass('active')) {

                    var currentLeft = $(this).css('left');
                    var newLeft = parseInt(currentLeft) + 115;

                } else {

                    var currentLeft = $(this).css('left');
                    var newLeft = parseInt(currentLeft) + 115;

                }


                $(this).animate({
                    left: newLeft + '%'
                }, 1500);


                if ($(this).hasClass('active')) {

                    $(this).removeClass('active');
                    $(this).prev().addClass('active');

                }

            });

        }

    });

    /* Left */
    $('#leftbutton').click(function () {

        var numberSlides = 0;
        $('#features-slider .slide').each(function () {
            numberSlides++;
        });

        var index = $('.slide.active').index() + 1;
        if (!$('.slide').is(':animated') && index != numberSlides) {

            $('#features-slider .slide').each(function () {

                if ($(this).hasClass('active')) {

                    var currentLeft = $(this).css('left');
                    var newLeft = parseInt(currentLeft) - 115;

                } else {

                    var currentLeft = $(this).css('left');
                    var newLeft = parseInt(currentLeft) - 115;

                }

                $(this).animate({
                    left: newLeft + '%'
                }, 1500);

                if ($(this).hasClass('active')) {

                    $(this).next().addClass('active');
                    $(this).removeClass('active').not($(this).next());

                }

            });

        }

    });

});

$(document).ready(function () {

    // Hide the slider and show a loading message while we do stuff and the images / DOM loads - Also disable overflow on the body so no horizontal scrollbar is shown
    $('body').css('overflow-x', 'hidden');
    $('#features-slider').hide();
    $('#loading').html('<center> <img id="loader" src="/wp-content/themes/responsive/library/images/ajax-loader.gif" /> Loading</center>');

});

解决

新的左键功能:

                                $('#leftbutton').click(function(){

                var numberSlides = 0;
                $('#features-slider .slide').each(function(){
                    numberSlides++;
                });

                var index = $('.slide.active').index()+1;

                if( !$('.slide').is(':animated') && index != numberSlides  ){

                    var done = false;               

                    $('#features-slider .slide').each(function(){

                        if($(this).hasClass('active')){

                            var currentLeft = $(this).css('left');
                            var newLeft = parseInt(currentLeft)-115;

                        } else {

                            var currentLeft = $(this).css('left');
                            var newLeft = parseInt(currentLeft)-115;

                        }

                    $(this).animate({left: newLeft+'%'}, 1500);

                    if($(this).hasClass('active') && done == false){

                            $(this).next().addClass('active');
                            $(this).removeClass('active');
                            done = true;

                    }

            });

            });
4

2 回答 2

1

如果您正在遍历元素,那么应该清楚发生了什么 - 您将“活动”类添加到下一个元素,然后下一次迭代将其移除。

这只是一个猜测,因为您没有为我(或其他任何人)发布足够的代码来确定。

编辑-好的,既然您已经更新了问题,很明显猜测是正确的。该.each()函数将向前遍历元素。当一个元素具有“活动”类时,代码将其删除并将其添加到下一个元素,然后在下一次迭代中撤消工作。

于 2012-08-08T15:53:02.267 回答
1

由于您正在引用this并且通过您所描述的行为,您可能会为元素列表迭代循环。结果,您正在完成您想要的操作,但下一次迭代正在删除以前的更改,因为您使用了删除一个类,然后再添加回该类。

就目前而言,您的代码并未说明这种情况是如何发生的。

更新: 正如怀疑的那样,您似乎正在循环,如下所示:each(function(){。在遍历您的对象时,该类被向前推进并且没有按预期运行。您正在声明将类添加到下一个元素,但将其从当前元素中删除,并且此行为将在您的迭代中继续。

在旁注中,更新您的代码以首先调用removeClass()当前对象,然后再将其添加到下一个对象:

if ($(this).hasClass('active')) {
    $(this).removeClass('active').next().addClass('active');
} 
于 2012-08-08T15:55:13.867 回答