2017-07-14 37 views
1

我有一个属性的对象,通过Howler.js库加载声音示例。强制对象属性与变量重新计算值

样本路径的一部分通过模式变量确定,该变量可以是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"] 
       }) 
}; 

使用按键,我将模式变量更改为下一个字母。 但是,播放的声音是最初生成的声音。

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

我在主字典对象内有多个对象和属性。有没有办法更新属性,而无需手动循环遍历它们?

+0

您可以张贴在那里你调用一个按键改变模式的代码?我想我在这里只是想念一点点,以便能够解决这个问题。 – Kevin

+0

@Kevin补充说,谢谢! – mrybak3

回答

0

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

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

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

然后,在你的keydown的处理程序,你可以这样做:

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