为了账号安全,请及时绑定邮箱和手机立即绑定

当在 react js 上触发 onClick 方法时,有什么方法可以在特定时间间隔内播放声音

当在 react js 上触发 onClick 方法时,有什么方法可以在特定时间间隔内播放声音

喵喵时光机 2023-06-09 14:57:30
import quackSound from "./music/Duck-quack.mp3";class MallardDuck extends Duck {  constructor(props) {    super();    this.state = {      canFly: false,      canQuack: false,      quackSound: new Audio(quackSound),    };  }  quack = () => {    const quack = new QuackSound();    return quack.quack();  };  fly = () => {    const fly = new FlyWings();    return fly.fly();  };  render() {    return (      <div className="duck">        <img          className={`image ${this.state.canFly ? "canFly" : ""}`}          src={mallardDuck}          alt="mallardDuck"          onAnimationEnd={() => {            this.setState({ canFly: false });          }}        />        <Button          className="eventButton"          onClick={(event) => {            event.preventDefault();            this.setState({ canFly: true });          }}        >          Fly        </Button>        <Button          className="eventButton"          onClick={(event) => {            event.preventDefault();            this.setState({ canQuack: true });            this.state.quackSound.play(); // Here !!!!!!          }}        >          Quack        </Button>        {this.state.canQuack ? this.quack() : null}        {this.state.canFly ? this.fly() : null}      </div>    );  }}我的音频 mp3 文件长 18 秒。我想玩前 3 或 4 秒。有什么办法可以在 react js 中做到这一点!上面提到的代码播放了整整18秒,我只想播放前几秒。我可以在 react js 中这样做吗?另外,我可以选择我的声音从哪里开始和结束吗?例如,如果我想播放 0.03 到 0.07 秒的嘎嘎声!
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

我会这样做:


import quackSound from "./music/Duck-quack.mp3";



class MallardDuck extends Duck {

  constructor(props) {

    super();

    this.state = {

      canFly: false,

      canQuack: false,

      round:0,

      quackSound: new Audio(quackSound),

    };

    this.intervalRef=null;

  }


  quack = () => {

    const quack = new QuackSound();

    return quack.quack();

  };


  fly = () => {

    const fly = new FlyWings();

    return fly.fly();

  };


  render() {

    return (

      <div className="duck">

        <img

          className={`image ${this.state.canFly ? "canFly" : ""}`}

          src={mallardDuck}

          alt="mallardDuck"

          onAnimationEnd={() => {

            this.setState({ canFly: false });

          }}

        />

        <Button

          className="eventButton"

          onClick={(event) => {

            event.preventDefault();

            this.setState({ canFly: true });

          }}

        >

          Fly

        </Button>

        <Button

          className="eventButton"

          onClick={(event) => {

            event.preventDefault();

            //you can tweek interval duration for your liking , for now its set to pay every .3 seconds (300 ms) 

           const myInterval=setInterval(()=>{

              if(this.state.round > 3) clearInterval(myInterval);

             this.setState({ canQuack: true });

             this.setState({ round:  this.state.round+1 });

             this.state.quackSound.play(); // Here !!!!!!},300)

          }}

        >

          Quack

        </Button>

        {this.state.canQuack ? this.quack() : null}

        {this.state.canFly ? this.fly() : null}

      </div>

    );

  }

}


查看完整回答
反对 回复 2023-06-09
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信