0

概要:

私はウェブサイトのQ&Aページに取り組んでいます。すべての答えは最初は隠されています。答えがスライドアウトするアニメーションを作成しようとしています。質問と回答の横に、それぞれ Q と A の小さな写真があります。

Qを左に移動し、回答を下にスライドさせ、質問の最初のクリックで「A」の画像をフェードインさせたい.

同じ質問の 2 回目のクリックで、非表示にします。別のものをクリックすると、すべて非表示になり、回答が表示されます。

コード:

コードを正しく動作させることができません。DOM ツリーのナビゲーションに何か問題があると思いますが、何が原因かわかりません。

HTML:

        <div class="faq">
            <div class="faq-question">Question goes here </div>
            <div class="faq-answer-container">
                <div class="faq-answer">Answer goes here </div>
            </div>              
        </div>

これは 1 つの質問と回答の組み合わせです。ページには全部で 5 つのクラスがあり、それらはすべて表示されているクラスと同じクラスを使用します (メッセージ コンテンツを除いて、すべてまったく同じように見えます)。

JQuery:

        <script>
        $(document).ready(function(){



            $(".faq-question").toggle(function(){

                <!-- this slides up all siblings -->

                $(this).siblings().slideUp();

                <!-- animation -->

                $(this).find('.letter-q').animate({left:"-=15"},"slow", function() {
                $(this).closest('faq').find('faq-answer-container').slideDown('slow');
                $(".letter-a").fadeIn("slow");
                });

            },function() {

            <!-- slides up all siblings -->
                $(this).siblings().slideUp();

                <!-- animation -->

                $('.letter-q').animate({left:"+=15"},"slow", function() {
                $(this).closest('faq').find('faq-answer-container').slideUp('slow');
                $(".letter-a").fadeOut("slow");

            });             
        });
        });
    </script>

.letter-q と .letter-a は、写真に指定されたクラスです。何らかの理由で、最初のクリックで Q がフェードアウトし、2 回目以降のすべてのクリックで、他のすべての Q が右にシフトし始めます。答えが滑り落ちることはありません。私は JQuery にはかなり慣れていませんが、使用したすべての API 資料を読みました。何が問題なのかわかりません。

どんな助けでも大歓迎です!

4

2 に答える 2

0

理解した!JSFiddle: http://jsfiddle.net/HEywH/

誰かが興味を持っている場合:

$(document).ready(function(){
                $(".faq").each(function(){

                <!-- this is to add the images to the questions and answers -->

                    $(this).prepend('<img src="images/faq-q.png" alt="Question" class="letter-q">');
                    $(this).closest(".faq").find(".faq-answer").prepend('<img src="images/faq-a.png" alt="Answer" class="letter-a">');
                }); 



                $(".faq-question").toggle(function(){

                    <!-- this initializes the state -->

                    $(this).closest(".faq").siblings(".faq").find(".faq-answer-container").slideUp();
                    $(this).closest(".faq").siblings(".faq").find(".letter-a").fadeOut();
                    $(this).closest(".faq").siblings(".faq").find('.letter-q').animate({left:"25px"},"fast");

                    <!-- animation -->

                    $(this).closest(".faq").find('.letter-q').animate({left:"-=15px"},"slow");
                    $(this).closest('.faq').find('.faq-answer-container').slideDown('slow');
                    $(this).closest(".faq").find(".letter-a").fadeIn("slow");

                },function() {

                <!-- initialization -->
                    $(this).closest(".faq").siblings(".faq").find(".faq-answer-container").slideUp();
                    $(this).closest(".faq").siblings(".faq").find(".letter-a").fadeOut();
                    $(this).closest(".faq").siblings(".faq").find('.letter-q').animate({left:"25px"},"fast");

                    <!-- animation -->

                    $(this).closest(".faq").find('.letter-q').animate({left:"25px"},"slow", function() {
                        $(this).closest('.faq').find('.faq-answer-container').slideUp('slow');
                        $(this).closest('.faq').find(".letter-a").fadeOut("slow");
                    });
                });             
            });
        </script>

    </head>
    <body>
        <div class="faq-container">
            <img src="images/faq-header.jpg" alt="faq header">
            <div class="faq">
                <div class="faq-question">How much is the application fee? Can I request an application fee waiver? </div>
                <div class="faq-answer-container">
                    <div class="faq-answer">The application fee is $70 and we do not offer fee waivers at this time. </div>
                </div>              
            </div>

私の DOM トラバースはかなり悪かったことがわかりました。ちょっとした調査で、自分の問題を理解することができました。

于 2012-11-21T21:45:59.267 に答える
0

状況を 100% 理解しているかどうかはわかりませんが、質問から得たものを思いつきました。私がどれだけ離れているか、質問があれば教えてください。詳細に入ることができます.

また、現在取り組んでいるものの jsFiddle を投稿できれば、それも役立ちます。

$(document).ready(function() {
    $('.faq-question-container').click(function() {
        //-- move all instances of .faq-answer-container up
        $('.faq-answer-container').slideUp();

        //-- move 'active' instances back to their original position and remove 'active' class
        $('.faq-question-active').removeClass('faq-question-active').animate({
            left: '-=50'
        });

        //-- slide/animate our question
        $(this).find('.faq-answer-container').slideToggle();
        $(this).addClass('faq-question-active').animate({
            left: '+=50'
        });
    });
});

http://jsfiddle.net/8qzvN/4/

これらのコメントも適切な構文に置き換える必要があります。これらは、使用している PHP コメントです。

交換

<!-- PHP Comment -->

// Javascript comment

また

/*
   Group of JS comments
*/
于 2012-11-21T18:18:44.157 に答える