-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

参照thisしているため、説明している動作によって、要素のリストのループを繰り返している可能性があります。その結果、必要なアクションを完了していますが、クラスを削除してからクラスを追加し直すという使用法により、次の反復では以前の変更が削除されます。

現状では、コードはこの現象がどのように発生するかを示していません。

更新: 疑わしいように、次のようにループしているようです: each(function(){. オブジェクトを繰り返し処理している間、クラスは前方に押し出されており、期待どおりに動作していません。クラスを次の要素に追加することを述べていますが、現在の要素から削除すると、この動作は繰り返し実行されます。

removeClass()補足として、次のオブジェクトに追加する前に、まず現在のオブジェクトを呼び出すようにコードを更新します。

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

要素を順方向に反復している場合、何が起こっているかは明らかです。「アクティブな」クラスを次の要素に追加すると、次の反復でそれが取り除かれます。

ただし、私 (または他の誰か) が確認するのに十分なコードを投稿していないため、これは推測にすぎません。

編集— 質問を更新したので、推測が正しかったことは明らかです。関数は.each()要素を順方向に反復します。要素に「アクティブな」クラスがあり、コードがそれを削除して次の要素に追加すると、次の反復で作業が元に戻されます。

于 2012-08-08T15:53:02.267 に答える