【问题标题】:create an audio object for an array of sound elements jquery, javascript为声音元素数组创建一个音频对象 jquery, javascript
【发布时间】:2015-03-05 10:01:01
【问题描述】:

我目前有很多这样的声音元素

var AudioGood = document.createElement('audio');
AudioGood.controls = true;
AudioGood.src = 'sounds/good.wav';
AudioGood.volume=0.5;

var AudioWrong = document.createElement('audio');
AudioWrong.controls = true;
AudioWrong.src = 'sounds/wrong.wav';
AudioWrong.volume=0.5;

等等。我不喜欢那样。我尝试做类似的东西

function track (name,controls,src,volume,loop){
    this.name = name;
    this.controls = controls;
    this.src = src;
    this.volume = volume;
    this.loop = loop;
}

var music = [
new track ('AudioGood',true,'sounds/good.wav',0.5,false),
new track ('AudioWrong',true,'sounds/wrong.wav',0.5,false),
new track ('musicBackground',true,'sounds/background.ogg',0.5,true),
new track ('AudioDrop',true,'sounds/drop.wav',0.5,false),
new track ('AudioCard',true,'sounds/card.wav',0.5,false)
];

但我需要创建一个音频元素 document.createElement('audio')。我该怎么做?这可能是一个愚蠢的问题,但请仁慈...

【问题讨论】:

    标签: javascript jquery arrays audio


    【解决方案1】:

    最合乎逻辑的方法是创建一个类似element 的属性指向 DOM 元素:

    function Track (name, controls, src, volume, loop) {
        this.name = name;
        this.element = document.createElement('audio');
        this.element.controls = controls;
        this.element.src = src;
        this.element.volume = volume;
        this.element.loop = loop;
    }
    

    此外,即使this.element 的属性可以公开访问,在轨道原型上创建必要的 getter/setter 方法也是一个不错的设计选择。例如:

    Track.prototype.setVolume = function(value) {
        this.element.volume = value;
    };
    

    【讨论】:

    • 感谢您的快速回答。我应该指定:我不需要将声音与特定元素绑定。这与球员有关。 (我实际上不需要音量,我认为 ar 控制。)我正在制作一种我使用一些声音的游戏(有些声音越来越大)。我调用下降或屏幕变化时的声音。
    • 好吧,听我说这也适用。
    • 我已经按照您所说的对跟踪功能进行了更改,但它不起作用。现在声音由 name.play() 调用(如 AudioGood.play() )但 music[index]。也不行。
    • 你能在 jsfiddle 中发布你的代码,以便我检查你是如何实现新功能的吗?
    【解决方案2】:

    您可以从track 函数中返回一个音频元素,而不是使用track 作为构造函数。

         function track (name,controls,src,volume,loop) {
    
                var  audio = document.createElement('audio');
    
              audio.name = name;
              audio.controls = controls;
              audio.src = src;
              audio.volume = volume;
              audio.loop = loop;
    
             return audio;
    
        };
    
    var music = [
       track('AudioGood',true,'sounds/good.wav',0.5,false),
       track('AudioWrong',true,'sounds/wrong.wav',0.5,false),
       track('musicBackground',true,'sounds/background.ogg',0.5,true),
       track('AudioDrop',true,'sounds/drop.wav',0.5,false),
       track('AudioCard',true,'sounds/card.wav',0.5,false)
    ];
    

    【讨论】:

    • 谢谢杰森,我已经尝试过代码。但什么也没有发生。声音现在没有播放。我应该如何在代码中调用它?目前由 AudioGood.play() 调用;我已经尝试过 music[index].play() - 不工作。显然我做错了。
    • 对不起,如果被 music[index].play(); 调用,它工作得非常好。只是一个 sintax 错误...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多