首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能在鼓声机上播放声音

我不能在鼓声机上播放声音
EN

Stack Overflow用户
提问于 2022-08-15 15:18:31
回答 1查看 113关注 0票数 0

我想创造一个简单的反应鼓机器从免费。

我想渲染9个鼓点和播放声音点击。

编辑:我现在可以渲染所有的键,但仍然有问题的功能,播放每个键的声音点击。我现在用的是querySelector,但还是不能用。我不知道怎么修好它。

代码语言:javascript
复制
import * as React from "https://cdn.skypack.dev/react@17.0.1";
import * as ReactDOM from "https://cdn.skypack.dev/react-dom@17.0.1";

 

function DrumPad() {
  const pads = [
    {
      key: "Q",
      id: "Heat-1",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3"
    },
    {
      key: "W",
      id: "Heat-2",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3"
    },
    {
      key: "E",
      id: "Heat-3",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3"
    },
    {
      key: "A",
      id: "Heat-4",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3"
    },
    {
      key: "S",
      id: "Clap",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3"
    },
    {
      key: "D",
      id: "Open-HH",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3"
    },
    {
      key: "Z",
      id: "Kick-n-Hat",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3"
    },
    {
      key: "X",
      id: "Kick",
      url: "https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3"
    },
    {
      key: "C",
      id: "Closed-HH",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3"
    }
  ];

  return (
    <>
      {pads.map((pad) => (
        <div
          key={pad.id}
          className="drum-pad"
          id={pad.id}
          onclick={function () {
            const sound = document.querySelector("audio[id=" + pad.key + "]");
            sound.play();
          }}
        >
          {pad.key}
          <audio id={pad.key} src={pad.url} />
        </div>
      ))}
    </>
  );
}

const App = () => {
  return (
    <div>
      <div id="drum-machine">
        <DrumPad />
      </div>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById("root"));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-15 15:27:07

由于在for循环中返回,组件将在循环的第一次迭代期间返回,这意味着函数调用将结束。这就是为什么只呈现一个键的原因。

在React.js中,我们通常做array.map()而不是for循环。类似于:

代码语言:javascript
复制
function DrumPad() {
  const pads = [
    {
      key: "Q",
      id: "Heat-1",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3",
    },
    {
      key: "W",
      id: "Heat-2",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3",
    },
    {
      key: "E",
      id: "Heat-3",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3",
    },
    {
      key: "A",
      id: "Heat-4",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3",
    },
    {
      key: "S",
      id: "Clap",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3",
    },
    {
      key: "D",
      id: "Open-HH",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3",
    },
    {
      key: "Z",
      id: "Kick-n-Hat",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3",
    },
    {
      key: "X",
      id: "Kick",
      url: "https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3",
    },
    {
      key: "C",
      id: "Closed-HH",
      url: "https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3",
    },
  ];
  return (
    <div id="drum-pad-grid">
      {pads.map((pad) => (
        <div
          key={pad.id}
          className="drum-pad"
          id={pad.id}
          onClick={() => {
            const audio = new Audio(pad.url);
            audio.play();
          }}
        >
          {pad.key}
        </div>
      ))}{" "}
    </div>
  );
}


ReactDOM.render( 
  <DrumPad /> ,
  document.getElementById("root")
);
代码语言:javascript
复制
#drum-pad-grid {
  max-width: 300px;
  display: grid;
  grid-template-columns: auto auto auto;
}

.drum-pad {
  cursor: pointer;
  text-align: center;
  margin: 5px;
  padding: 10px;
  background-color: gainsboro
}

.drum-pad:active {
  background-color: gray;
}
代码语言:javascript
复制
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

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

https://stackoverflow.com/questions/73363023

复制
相关文章

相似问题

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