You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Howler.js中如何通过变量调用另一个变量执行播放操作?

问题描述

我在页面中定义了全局变量:

var sound_thunderstorm = new Howl({  src: ['thunderstorm.mp3'], preload: true });

通过 sound_thunderstorm.play(); 可正常播放该音频,全局变量可在任意位置调用。


点击鼠标后,我想播放data-soundclick属性对应的音频,编写代码:

var soundfile = 'sound_'+jQuery(this).data('soundclick');

此时soundfile的值为'sound_thunderstorm',但调用 soundfile.play() 无效,无法识别对应音频实例。请问如何通过一个变量调用另一个变量?

解决方案

当前soundfile只是字符串,并非实际的Howl音频实例,所以直接调用.play()会失效,以下两种方法可以解决:

方法一:通过window全局对象访问

全局变量默认挂载在window对象上,可通过字符串作为键获取对应实例:

var soundKey = 'sound_' + jQuery(this).data('soundclick');
window[soundKey].play();

当soundKey为'sound_thunderstorm'时,window['sound_thunderstorm']会直接获取到你定义的Howl实例,即可正常调用播放方法。

方法二:用统一对象管理音频实例(更推荐)

将所有音频实例整合到一个对象中,替代零散的全局变量,管理和调用更规范:

// 重构全局音频实例的定义方式
var soundLibrary = {
  thunderstorm: new Howl({ src: ['thunderstorm.mp3'], preload: true })
  // 可在此添加其他音频实例,比如 rain: new Howl({ src: ['rain.mp3'] })
};

// 点击事件中的调用代码
var soundName = jQuery(this).data('soundclick');
soundLibrary[soundName].play();

这种方式无需拼接sound_前缀,直接使用data-soundclick属性的值作为对象的键,代码更简洁,还能避免全局变量污染。

内容的提问来源于stack exchange,提问作者Vexxed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:01:04