reactjs - 在 React 中模拟长按、长标签
问题描述
我正在尝试在 React 中实现录音。我能找到的最好的免费图书馆是:
https://www.npmjs.com/package/react-mp3-recorder
但是该库仅公开了一个您必须在录制时长按的按钮。这不是我想要的。我想要一个开始录制和结束录制的按钮。现在我试图找到解决这个问题的最简单方法。一种想法是使用 react/JS 简单地模拟长按事件。
这有可能吗?
谢谢!
解决方案
我不会说模拟事件是最好的方法,而是直接回答这个问题:是的,你可以模拟事件。
class MyApp extends React.Component {
constructor (props) {
super(props)
this.state = {
isRecording: false
}
this.myClick = this.myClick.bind(this)
}
myClick () {
let recorder = document.getElementById('recorder').childNodes[0].childNodes[0]
if (this.state.isRecording) {
let pressStart = new Event('mousedown')
pressStart.target = recorder
this.setState({isRecording:true}, () => window.dispatchEvent(pressStart))
}
else {
let pressEnd = newEvent('mouseup')
pressEnd.target = recorder
this.setState({isRecording:false}, () => window.dispatchEvent(pressEnd))
}
}
render () {
return (
<section>
<button onClick={this.myClick}>Start/Stop</button>
<div id='recorder'>
<Recorder />
</div>
</section>
)
}
}
您必须使用 css 隐藏默认记录按钮,display:none
以便它无法获取实际的 mousedown 和 mouseup 事件。
我实际上建议尝试扩展 Recorder 组件并覆盖渲染,但我还没有能够成功地做到这一点:
// example, not fully-functional snippet
class MyRecorder extends Recorder {
render () {
return (
<button></button>
)
}
}
您可以从他们的代码中看到他们拥有_onMouseDown
和_onMouseUp
您可以使用的功能。
扩展 Recorder 组件并非万无一失,您可能会遇到这个问题,但现代浏览器似乎会接受它。
推荐阅读
- android - Android First Volley 请求需要更长的时间
- python - 如何在 django 中实现合并查询?
- reactjs - Firebase 身份验证:每次获取或设置 cookie 时都有 getIdToken?
- python - 使用 pytest,断言与“大”多行字符串比较非常慢
- php - 替换多维嵌套数组中特定索引的值
- javascript - 如何在 .htaccess 中进行例外处理
- metrics - HDP 集群上的 ambari + ambari-metrics-collector 服务未启动
- php - 如何在 Codeigniter 中为某些控制器禁用 csrf 令牌
- ios - IOS 中的 MissingPluginException(未找到通道 plugins.flutter.io/firebase_messaging 上的方法 requestsNotificationPermissions 的实现)
- python - Python查询数据框以查找具有最小值的行