weixin_41244451 2024-07-10 10:03 采纳率: 93.9%
浏览 0
已结题

这里有一个小BUG,就是如果我连续点击“下一题”按纽时,我点几下,音频和弹框就重复几次,怎么弄才能不管点几下,音频和弹框只出现一次?

<button onclick="checkAnswer(1)" style="width: 100%; height: 320px; font-size: 40px;">{if $zushu eq 1 and $tiliang eq 1}看答案{else}下一题{/if}</button>

function playNotificationSound() {
    var audio = new Audio('/oa/huidazhengque.mp3'); // 将notification.mp3替换为你的音频文件路径
    audio.onended = function() {
        alert('正确,答对了!');
    };
    audio.play();
}
function playNotificationSound1() {
    var audio = new Audio('/oa/cuowu.mp3'); // 将notification.mp3替换为你的音频文件路径
    audio.onended = function() {
        alert('答错了!');
    };
    audio.play();
}
function checkAnswer(tiaodaan) {
    if($.trim($("input[name=answerInput]").val()) == "")
    {
        $("input[name=answerInput]").focus();
        return false;
    }
    document.getElementById('question1').textContent='';
    isQuestionDisplayed = false;//每一题重新禁用按纽
    const userAnswer = parseInt(document.getElementById('answerInput').value);
    if (userAnswer === questions[currentQuestionIndex].answer) {
        var huidashijian=6000;
        document.getElementById('question').textContent = questions[currentQuestionIndex].answer;
        playNotificationSound();
    } else {
        var huidashijian=5000;
        playNotificationSound1();
        document.getElementById('question').textContent = questions[currentQuestionIndex].answer;
    }
    
    setTimeout(() => {
        document.getElementById('answerInput').value = '';
        $("input[name=answerInput]").focus();
        let endTime = new Date().getTime(); // 记录结束时间
        let totalTime = (endTime - startTime) / 1000; // 转换为秒
        
        //保存所有题目
        if(numbers=='')
        {
            if (userAnswer !== undefined) { // 确保 userAnswer 已被定义
                questions[currentQuestionIndex].userAnswer = userAnswer; // 添加这一行
            }
            if (userAnswer === questions[currentQuestionIndex].answer) {
                questions[currentQuestionIndex].isCorrect = true;
            } else {
                questions[currentQuestionIndex].isCorrect = false;
            }
        }
        else
        {
            // 更新用户答案和是否正确的状态
            questions[currentQuestionIndex].userAnswer = userAnswer;
            questions[currentQuestionIndex].isCorrect = userAnswer === questions[currentQuestionIndex].answer;
        }
        localStorage.setItem('questionsData', JSON.stringify(questions));
        
        if(tiliang==1)
        {
            if (currentQuestionIndex < jidaoti) {//几道题
                currentQuestionIndex++;
                document.getElementById('question').textContent = '';
                if(tiaodaan==1)
                {
                    generateQuestion(numbers);
                }
                else
                {
                    window.location.href = "/oa/oa_zxsxl.php?act=jieguo&totalTime="+totalTime+"&type={$type}&type_text={$type_text}&xingshi={$xingshi}&xingshi_text={$xingshi_text}&tiliang={$tiliang}&zushu={$zushu}&bishu={$bishu}&shijian={$shijian}&yusu={$yusu}&timulibiao="+encodeURIComponent(timulibiao)+"";
                }
            } else {
                window.location.href = "/oa/oa_zxsxl.php?act=jieguo&totalTime="+totalTime+"&type={$type}&type_text={$type_text}&xingshi={$xingshi}&xingshi_text={$xingshi_text}&tiliang={$tiliang}&zushu={$zushu}&bishu={$bishu}&shijian={$shijian}&yusu={$yusu}&timulibiao="+encodeURIComponent(timulibiao)+"";
            }
        }
        else
        {
            if(numbers=='')
            {
                currentQuestionIndex++;
                document.getElementById('question').textContent = '';
                generateQuestion(numbers);
            }
            else
            {
                window.location.href = "/oa/oa_zxsxl.php?act=jieguo&totalTime="+totalTime+"&type={$type}&type_text={$type_text}&xingshi={$xingshi}&xingshi_text={$xingshi_text}&tiliang={$tiliang}&zushu={$zushu}&bishu={$bishu}&shijian={$shijian}&yusu={$yusu}&timulibiao="+encodeURIComponent(timulibiao)+"";
            }
        }
        if(xingshi==1 || xingshi==2)
        {
            document.getElementById('question').textContent = '请看题';
        }
        else
        {
            document.getElementById('question').textContent = '请听题';
            speak1('请听题');
        }
    }, huidashijian);
}

这里有一个小BUG,就是如果我连续点击“下一题”按纽时,我点几下,音频和弹框就重复几次,怎么弄才能不管点几下,音频和弹框只出现一次?

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-07-10 10:05
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要解决你遇到的问题,我们可以采取以下步骤来确保音频和弹框在每次点击时只触发一次:

    1. 定义一个全局变量:首先,我们需要定义一个全局变量来跟踪音频是否正在播放。我们可以称这个变量为isAudioPlaying

    2. 修改音频播放函数:在playNotificationSoundplayNotificationSound1函数中,我们需要添加一个检查来确保只有在isAudioPlayingfalse时才播放音频。

    3. 设置和重置变量:在音频开始播放时设置isAudioPlayingtrue,然后在音频播放结束时重置为false

    4. 禁用按钮:在音频播放期间,我们需要禁用按钮以防止用户重复点击。

    下面是修改后的代码示例:

    // 定义全局变量
    let isAudioPlaying = false;
    
    // 修改playNotificationSound函数
    function playNotificationSound() {
        if (isAudioPlaying) return; // 如果音频正在播放,则不执行任何操作
        isAudioPlaying = true; // 设置音频正在播放的标志
        var audio = new Audio('/oa/huidazhengque.mp3');
        audio.onended = function() {
            alert('正确,答对了!');
            isAudioPlaying = false; // 重置音频播放标志
        };
        audio.play();
    }
    
    // 修改playNotificationSound1函数
    function playNotificationSound1() {
        if (isAudioPlaying) return; // 同上
        isAudioPlaying = true;
        var audio = new Audio('/oa/cuowu.mp3');
        audio.onended = function() {
            alert('答错了!');
            isAudioPlaying = false;
        };
        audio.play();
    }
    
    // 修改checkAnswer函数
    function checkAnswer(tiaodaan) {
        // ... 省略其他代码 ...
    
        // 确保音频和弹框只播放一次
        if (!isAudioPlaying) {
            if (userAnswer === questions[currentQuestionIndex].answer) {
                playNotificationSound();
            } else {
                playNotificationSound1();
            }
            // 禁用按钮
            document.querySelector('button[onclick*="checkAnswer"]').disabled = true;
            // 设置一个定时器来在音频播放结束后重新启用按钮
            setTimeout(() => {
                document.querySelector('button[onclick*="checkAnswer"]').disabled = false;
            }, 6000); // 假设音频最长播放时间为6秒
        }
    
        // ... 省略其他代码 ...
    }
    

    请注意,我在这里使用了setTimeout来重新启用按钮,假设音频最长播放时间为6秒。你需要根据你的音频文件的实际长度来调整这个时间。

    另外,我使用了document.querySelector来选择按钮并禁用它。确保你的按钮元素有一个可以被选择的属性,比如onclick属性。

    希望这些修改能帮助你解决问题。如果你需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月10日
  • 已采纳回答 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享