点击后我想推迟一些事情

时间:2018-03-22 17:08:00

标签: jquery-animate settimeout delay

我正在创建一个多项选择问题程序,我有这样一来,一旦选择了正确答案,就会生成一个新问题。

虽然我希望它自动转到下一个问题,但我希望它延迟大约0.5秒,以便用户可以看到他们的答案是正确的。

我选择删除该类并将其替换为另一个类,以便背景改变颜色。一旦新问题出现,我希望所有颜色都恢复正常,所以我再次删除新类并将其替换为旧类。

如果我没有自动前进到新问题,颜色会按我喜欢的方式出现,但是如果我创建它以便它自动移动,我就无法保持显示相同。

在论坛中搜索后,我读到setTimeout应该有效,但我没有取得多大成功。我也尝试过制作动画以便花费时间,但这对我来说也不起作用。动画效果很好,但它仍然继续讨论新的问题。

我将包括整个程序,因为它可能会更好,但我正在处理的部分是在函数检查()下。

我一直在试图弄清楚如何延迟一段时间,但完全不成功。哦,请善待我,我的经验很少。我只是通过做可汗学院课程学会了如何做javascript。谢谢!

        <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Project: listening to sounds </title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

        <!-- ***************** CSS styles ***************** -->
        <style>
            body {
                font-family: comic sans ms, sans-serif;
                background-image: url("background.jpg");
                background-color:  rgb(216, 252, 252);

            }
            form {
                font-size: 1.2em;
            }

            #text {
                background-color: wheat;
                width: 150px;
                height: 25px;
                color: blue;
                font-size: 1em;

            }

            .SoundBite {
                float: left;
                clear: none;
                position: absolute;
                top: 130px;
                left: 100px;
                padding: 5px;
                background: darkblue;
                color: white;
                height: 120px;
                width: 200px;
                border-radius: 50px;
                margin: auto;
                text-align: center;
                vertical-align: middle;
                font-size: 5em;
            }

            .SoundBite:hover {
                background-color: darkgreen;
                cursor: pointer;
            }

            .Score {
                float: right;
                clear: none;
                position: absolute;
                top: 50px;
                left: 140px;
                padding: 5px;
                background: darkblue;
                border-color: pink;
                border: 5px;
                opacity: 0.8;
                color: white;
                height: 45px;
                width: 120px;
                border-radius: 50px;
                margin: auto;
                text-align: center;
                vertical-align: middle;
                font-size: 2em;
                pointer-events: none;
            }           

            .Answer {
                position: absolute;
                color: white;
                height: 45px;
                width: 120px;
                padding: 5px;
                border-radius: 25px;
                margin: auto;
                text-align: center;
                vertical-align: middle;
                font-size: 2em;
                background-color: darkblue;
            }

            .AnswerCorrect {
                position: absolute;
                color: white;
                height: 45px;
                width: 120px;
                padding: 5px;
                border-radius: 25px;
                margin: auto;
                text-align: center;
                vertical-align: middle;
                font-size: 2em;
                background-color: green;            
            }

            .Answer:hover {
                background-color: #e44404;
                cursor: pointer; 

            }

            .AnswerWrong {
                position: absolute;
                color: white;
                height: 45px;
                width: 120px;
                padding: 5px;
                border-radius: 25px;
                margin: auto;
                text-align: center;
                vertical-align: middle;
                font-size: 2em;
                background-color: red;
            }

            #Answer1 {
                top: 20px;
                left: 400px;

            }
            #Answer2 {
                top: 85px;
                left: 400px;

            }
            #Answer3 {
                top: 150px;
                left: 400px;
            }
            #Answer4 {
                top: 220px;
                left: 400px;
            }

            #Answer5 {
                top: 290px;
                left: 400px;
            }


        </style>
    </head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>


    <body>

    <audio id="audio" src="audio/rug.mp3" autostart="false" ></audio>
    <audio id = "win" src="audio/win.mp3" autostart = "true"></audio>
    <audio id = "lose" src = "audio/lose.mp3" autstart = "true"></audio>

    <a onclick="playSound();"><div span class="SoundBite"><i class="fa fa-file-sound-o" id="audio" src="audio/rug.mp3" autostart="false" style="font-size:64px;color:skyblue"></i></div></a>
    <a onclick ="checkAnswer = 1; check();"><div class = "Answer" id="Answer1">1</div>
    <a onclick ="checkAnswer = 2; check();"><div class = "Answer" id="Answer2">2</div>
    <a onclick ="checkAnswer = 3; check();"><div class = "Answer" id="Answer3">3</div>
    <a onclick ="checkAnswer = 4; check();"><div class = "Answer" id="Answer4">4</div>
    <a onclick ="checkAnswer = 5; check();"><div class = "Answer" id="Answer5">5</div>
    <div class = "Score">Score</div>


    <!-- <a onclick ="next();"><div id = "Next">Start</div> -->



    <!-- ********************************* Javascript programming follows ********************************* -->

    <script>
    $(function() {
    });

        // declare the variables to be used ... do I need global variables? Maybe I should think about these...
        var word, ext, directory, wordPosition, decoyWordPosition, answerPosition, decoyAnswerPosition, answer, checkAnswer, correct, incorrect, tries;
        directory = "audio/";
        ext = ".mp3";
        correct = 0;
        incorrect = 0;
        tries = 0;



        // list of words that are spoken
        word = ["dam", "dog", "dug", "cat", "cot", "cut", "ran", "rot", "rug"]; 
        wordPosition = Math.floor(Math.random()*word.length); // returns a random array wordPosition


    /***************************************************************************
     ** Functions:
     **
     **************************************************************************/


    // function to display word
    function displayWord() {
        //$(".SoundBite").text(word[wordPosition]);
        //$("#audio").attr("src", directory+word[wordPosition]+ext);
    }

    // function to display the answer in one of the positions that are assigned
    function displayAnswer(answerNumber, wordNumber) {
        $("#Answer"+answerNumber).text(word[wordNumber]);
        $("#audio").attr("src", directory+word[wordPosition]+ext);
    }   

    // function to play the sound 
    function playSound() {        
          var sound = document.getElementById("audio");
          sound.play();
      }

    // function to play a winning sound
    function win() {
        var sound = document.getElementById("win");
        sound.play();
    }

    // function to play a losing sound
    function lose() {
        var sound = document.getElementById("lose");
        sound.play();
    }

    function timer() {
        new Date().toLocaleTimeString();
    }

    function check() {
            if (answer == checkAnswer) {
                //$("#Answer"+checkAnswer).animate({height: "45px", opacity: '0'})
                                        //.animate({height: "45px", opacity: '1.0'});
                $("#Answer"+checkAnswer).animate({height: "45px", opacity: '0'})
                                        .animate({height: "45px", opacity: '1.0'})
                                        .removeClass("Answer").addClass("AnswerCorrect");
                win();
                correct++;
                tries++;
                refresh();

                next();
                // need a delay function -- can't get it to work.


            } else {
                $("#Answer"+checkAnswer).removeClass("Answer").addClass("AnswerWrong"); //css({'background-color': 'red'});
                lose();
                incorrect++;
                tries++;

            }

            // write in the score
            $(".Score").text(Math.round(correct/tries*100)+"%");
    }

    // making a function to populate the answers 
    function populateAnswers() {
    for (var i = 0; i < 6; i++) {
        if (answerPosition < 6) {
            if (decoyWordPosition == wordPosition) {
                answer=answerPosition
            }
            displayAnswer(answerPosition, decoyWordPosition);
            answerPosition++;
            decoyWordPosition++;
            if (decoyWordPosition >= word.length) { // want to make sure that the words are within the array
                decoyWordPosition = 1               // reset to the beginning to 'wrap' the array.
                }

            } else {
                answerPosition = 1;
            }
        }
    }

    // using a random generator to place the answer in a random spot 1 through 4
    function randomGenerator() {
    answerPosition = Math.floor(Math.random()*4)+1;
    }

    // returns a random array wordPosition
    function randomWord() {
        wordPosition = Math.floor(Math.random()*word.length); 
    }

    function refresh() {
        for (var i = 1; i <= 5; i++) {
        $("#Answer"+i).removeClass("AnswerWrong").addClass("Answer");
        $("#Answer"+i).removeClass("AnswerCorrect").addClass("Answer");
        }
    } 

    /***************************************************************************
     *  program   as a function                                                             *
     **************************************************************************/

    function next() {

        $("#Next").text("Continue");

        randomWord();
        randomGenerator();

        // make the decoy answers randomly
        if (wordPosition == 0 || wordPosition == 1) { 

            // In case the array is at the beginning: make the decoy start at the same spot as the wordPosition
            decoyWordPosition = wordPosition;
            } else {
                // start the decoy word after the word
                decoyWordPosition = wordPosition -2;
        }

        populateAnswers();

    }
    next();

    </script>
    </body>
    </html>

1 个答案:

答案 0 :(得分:1)

仅适用于试图找到setTimeout功能解决方案的其他人。

我这样使用它:

setTimeout(myFunction(),2000);

但是,它不适用于功能后的括号。您需要省略这些括号:

setTimeout(myFunction,2000);