首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在react中使用howler.js?

如何在react中使用howler.js?
EN

Stack Overflow用户
提问于 2019-02-26 21:23:05
回答 4查看 5.3K关注 0票数 6

为什么点击播放可以播放声音,点击播放却没有声音??

代码语言:javascript
复制
import React, { Component } from "react";
import { Howl, Howler } from 'howler';

class App extends Component {
  SoundPlay() {
    const Sounds = new Howl({
      src: ["sound.mp3"]
    })
    Sounds.play()
    console.log("sound")
  }
  render() {
    return (
      <div className="App">
        <button onClick={this.SoundPlay}>play</button>
      </div>
    );
  }
}

export default App;
EN

回答 4

Stack Overflow用户

发布于 2019-11-11 08:01:37

我最近发布了react-use-audio-player,它是一个对howlerjs的react钩子抽象。你可以这样使用它:

代码语言:javascript
复制
import { useAudioPlayer } from "react-use-audio-player"

function MyComponent() {
    const { play, pause, stop, playing } = useAudioPlayer()

    const handlePlayPause = () => {
        if (playing) {
            pause()
        } else {
            play()
        }
    }

    return (
        <div className="audioControls">
            <button onClick={handlePlayPause}>
                {playing ? "pause" : "play"}
            </button>
            <button onClick={stop}>stop</button>
        </div>
    )
}
票数 5
EN

Stack Overflow用户

发布于 2019-10-03 18:33:45

将您的代码更改为以下代码(在文件名前面使用/ ),并确保您的文件位于应用程序的public文件夹中。

代码语言:javascript
复制
const Sounds = new Howl({
    src: ["/sound.mp3"]
})
票数 3
EN

Stack Overflow用户

发布于 2019-11-15 10:44:44

我最近也遇到了这个问题。在JavaScript中直接使用号叫器的问题是,您需要手动管理号叫器实例。当您的组件卸载时,您将需要停止任何播放声音。

React Howler的存在解决了这个问题:

代码语言:javascript
复制
import React, { useState } from 'react'
import ReactHowler from 'react-howler'

export default function PlayPause() {
  const { play, setPlay } = useState(false)
  return (
    <div>
      <ReactHowler src='./sound.mp3' playing={play} />
      <button onClick={() => setPlay(!play)}>
        { play ? 'Pause' : 'Play' }
      </button>
    </div>
  )
}

不过,我必须承认,React Howler并没有解决我的用例,因为它实际上并没有实现howler的所有功能,尤其是音频精灵。

我最终编写了我自己的库, .它将文件的加载与声音的播放分开,如下所示:

代码语言:javascript
复制
import React, { useState } from 'react'
import { Play, useHowl } from 'rehowl'

export default function PlayPause() {
  const { play, setPlay } = useState(false)
  const { howl } = useHowl({ src: './sound.mp3' })
  return (
    <div>
      <Play howl={howl} pause={!play} />
      <button onClick={() => setPlay(!play)}>
        { play ? 'Pause' : 'Play' }
      </button>
    </div>
  )
}

在另一个答案中链接的useAudioPlayer库似乎是react-howler的另一个可靠的替代方案。

在任何情况下,我都会说直接在React项目中使用Howler会导致令人头疼的问题,因为在处理组件生命周期的同时管理播放声音是很困难的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54886538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档