【问题标题】:Force object property with variable to recalculate value强制具有变量的对象属性重新计算值
【发布时间】:2017-12-20 00:25:18
【问题描述】:

我有一个具有属性的对象,该属性通过 Howler.js 库加载声音样本。

样本的部分路径是通过mode变量确定的,可以是A、B、C等,都是有效的文件夹,包含同名的声音样本,但声音略有不同。

var mode = "A";
$("html").on("keydown", function(e){
    if(e.keyCode === 32) {
        switch (mode) {
            case "A":
                mode = "B";
                break;
            case "B":
                mode = "C";
                break;
            .
            .
            .
            default:
                mode = "A";
        }
    }

    dict["coolSound"].sound.play();
});



// Seperate file
var dictionary = {
    coolSound: {
               sound: new Howl({
                   src: ["sounds/" + mode + "/bubbles.mp3"]
               })
};

通过按键,我将模式变量更改为下一个字母。 但是,播放的声音是生成的原始声音。

我试图让它调用一个设置声音的函数,但这也不起作用。

我在主字典对象中有多个像这样的对象和属性。有没有办法在不手动循环的情况下更新属性?

【问题讨论】:

  • 你能发布你调用按键来改变模式的代码吗?我想我在这里缺少一点点能够破解它。
  • @Kevin 添加了,谢谢!

标签: javascript jquery object dom audio


【解决方案1】:

不,你在代码开头设置的属性只是一个字符串,它不记得它是由一个字符串、一个变量和一个字符串组成的。

您可以做的是使用函数而不是字符串值。例如:

var dictionary = {
    coolSound: {
        sound: function (mode) {
            return new Howl({src: ["sounds/" + mode + "/bubbles.mp3"]});
        }
    }
}

然后,在您的 keydown 处理程序中,您可以执行以下操作:

dict["coolSound"].sound(mode).play();

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多