【发布时间】:2015-08-21 00:43:11
【问题描述】:
我有一个简单的 React 组件,它应该在 keyDown 上通过 Web 音频 API 播放音频,并在 keyUp 上停止音频。我have a JSFiddle 显示了我在本地主机上看到的相同行为。这是内联代码:
var Keyboard = React.createClass({
componentDidMount: function () {
var context = new (window.AudioContext || window.webkitAudioContext)();
var oscillator = context.createOscillator();
var gain = context.createGain();
oscillator.type = 'sine';
oscillator.frequency.value = 3000;
gain.gain.value = 0.5;
oscillator.connect(gain);
gain.connect(context.destination);
this.setState({
context: context,
oscillator: oscillator,
gain: gain
});
},
render: function() {
return (
<div id="keyboard"
onKeyDown={this.playNote}
onKeyUp={this.stopNote}>
</div>
);
},
playNote: function (ev) {
console.log('play');
this.state.oscillator.start();
},
stopNote: function (ev) {
console.log('stop');
this.state.oscillator.stop();
}
});
React.render(<Keyboard />, document.getElementById('container'));
即使没有网络音频的东西,我也无法显示日志语句。我已经阅读了 React Event System 文档并没有看到任何有用的信息,并且我使用鼠标编写了其他 React 组件并毫无问题地更改事件——它似乎是特定于键盘事件的。任何帮助将不胜感激!
编辑:更正了网络音频 API 调用。应该是 start(),而不是 play()。
【问题讨论】:
标签: javascript web reactjs frontend