Javascript:在 'select' 上运行函数 'option'/How to stop setInterval(...);?

标签 javascript jquery select intervals

我正在做一个业余项目来帮助我提高我的 javascript 技能,所以请多多包涵。 简而言之:我正在尝试制作一个用于 super 粉碎兄弟混战 Angular 色的移动式节拍器。我有一些关于何时输入按钮的帧数据,并将在各个帧播放 beep.mp3 声音。 所以我想要的是使用依赖下拉列表,经过一些谷歌搜索/修补后我终于开始工作了。其代码如下所示:

<html>

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

<style>

#category2 option{
    display:none;
}

#category2 option.label{
    display:block;
}

</style>

<body>

<form id="formname" name="formname" method="post" action="submitform.asp" >

    <select name="category1" id="category1">

        <option value="">Select Category1</option>
        <option value="fox">Fox</option>
        <option value="mario">Mario</option>
    </select>



    <select disabled="disabled" id="category2" name="category2">
        <option value>Select Category2</option>


            <!-- FOX: -->
        <option rel="fox">Select: </option>
        <option rel="fox" value="wavedash">Wavedash</option>
        <option rel="fox" value="waveshine">Waveshine</option>

            <!-- MARIO -->
        <option rel="mario">Select: </option>
        <option rel="mario" value="wavedash">Wavedash</option>
    </select>

</form>

</body>

<script>

$(function(){

    var $cat = $("#category1"),
        $subcat = $("#category2");

    $cat.on("change",function(){
        var _rel = $(this).val();
        $subcat.find("option").attr("style","");
        $subcat.val("");
        if(!_rel) return $subcat.prop("disabled",true);
        $subcat.find("[rel="+_rel+"]").show();
        $subcat.prop("disabled",false);
    });

});

</script>

</html>

然后,我有一段不同的代码,我在其中使用 setInterval 编写了一个函数来实际显示所选 Angular 色的所选移动。例如,我在选项中选择了“Fox”,然后我选择了 Fox 的移动“Waveshine”,我希望它运行此代码:

var sound1 = new Audio('beep.mp3'); 
var sound2 = new Audio('beep2.mp3'); 


    var sec = 0;
    var frame = 0;
    var slowDown = 5;

    setInterval( function(){
        frame = ++frame%60;
        document.getElementById("frames").innerHTML="Framecount: "+String(pad(frame));

        if(frame >= 0 && frame <= 4){
            sound1.loop = false;
            sound1.play();

            document.getElementById("test").innerHTML=("⇑");
        } else {
            document.getElementById("test").innerHTML="";
        }
        if(frame >= 4 && frame <= 14){
            if(frame == 4){
                sound2.play();
            }
            document.getElementById("test").innerHTML=("R+⇘");
        }

    }, (1000/60)*slowDown);


    function pad ( val ) { 
        return val > 9 ? val : "0" + val; 
    }

但是一旦我在选项中选择了“Fox”和“Wavedash”,我就无法弄清楚如何让它运行这段代码,而且我也不知道如果我切换到,如何停止 setInterval,例如,“Mario”和“Wavedash”。 So basically I'm trying to combine the two pieces of code that I have now to run a function on interval, when a certain character and a certain move is selected. 抱歉,如果这篇文章有点不清楚,请告诉我是否应该扩展某些内容。感谢阅读。

最佳答案

首先,您需要将这段代码放在一个函数中:

function playSound() {
    var sound1 = new Audio('beep.mp3'); 
    var sound2 = new Audio('beep2.mp3'); 
    var sec = 0;
    var frame = 0;
    var slowDown = 5;

    setInterval( function(){
        frame = ++frame%60;
        document.getElementById("frames").innerHTML="Framecount: "+String(pad(frame));

        if(frame >= 0 && frame <= 4){
            sound1.loop = false;
            sound1.play();

            document.getElementById("test").innerHTML=("⇑");
        } else {
            document.getElementById("test").innerHTML="";
        }
        if(frame >= 4 && frame <= 14){
            if(frame == 4){
                sound2.play();
            }
            document.getElementById("test").innerHTML=("R+⇘");
        }

    }, (1000/60)*slowDown);
}

然后在您的 $cat$subcat onchange 事件上,您可以调用 playSound 方法。

$cat.on("change",function() {
   // Your code
   latestSoundInterval = playSound();
});

setInterval 返回一个整数,因此最好跟踪您在更改类别/子类别时调用的所有 setIntervals

var soundInterval = setInterval() { .... }

您可以使用上述变量作为新的 playSound 函数的返回类型。

然后可以使用 clearInterval 停止间隔并将其传递回 soundInterval 变量。

var latestSoundInterval = playSound();

clearInterval(latestSoundInterval); // Stop the set interval function

关于Javascript:在 'select' 上运行函数 'option'/How to stop setInterval(...);?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453554/

相关文章:

javascript - 在 jquery 中导入另一个脚本

XML 差异的 JavaScript 实现

javascript - JQuery:单击父div时将焦点设置在选择上

c# - Xpath 节点选择 - 如何选择 2 个不同的元素?

javascript - 具有大 DOM 的移动设备上的 CSS translate3d 性能问题

javascript - 如何在 x 轴上获取 highcharts 日期?

javascript - 为什么 jQuery.ready 在页面未准备好时运行?

javascript - 如何从 href 链接获取页码或特定参数

javascript - target _blank 打开后直接关闭

MySQL 查询效率不高(PHP 搜索)