Как проигрывать аудио при наведении курсора?

1

Я разработал облако точек. когда мышь над определенной точкой, он будет печатать информацию журнала.

Изображение 174551

svg.selectAll("circle")
    .data(dataset)
    .enter()
    .append("circle")
    .attr("cx", function(d) {
        return xScale(d3.values(d)[0].pos[0]);
    })
    .attr("cy", function(d) {
        return yScale(d3.values(d)[0].pos[1]);
    })
    .attr("r", 2)
    .attr("fill", function(d) {
        return color(d3.values(d)[0].lab);
    })
    .on("click",function(d){
        console.log(d);});

Тем не менее, играть аудио, когда мышь над ним кажется более забавной.

Я ищу Google, ничего не знаю об этом. Я думаю, что код может быть простым, например

.on("click",function(d){
            play(d+".wav");});
  • 1
    Проверьте вопрос stackoverflow.com/questions/9419263/…
  • 0
    @Daniel Спасибо !!! я понял
Показать ещё 2 комментария
Теги:
audio
d3.js
audiocontext

2 ответа

2

Прежде всего: я ненавижу веб-сайты, которые играют какой-то звук, это очень раздражает. Я пишу этот ответ так же, как любопытство, и как дополнение к ответу OP.

Это ясно из обоих вопросов OP и ответа, что они относятся к аудио файлу. Однако, поскольку D3 означает документы, управляемые данными, мы можем использовать данные для воспроизведения звука другими, творческими способами.

В этом ответе я буду использовать интерфейс AudioContext. Хороший учебник можно найти здесь: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_API

В этой демонстрации я создаю массив данных для кругов, устанавливая свойство, называемое frequency, которое является частотой (в герцах) между 500 и 2500 Гц:

const data = d3.range(30).map(d => ({
  frequency: 500 + Math.random() * 2000,
  //etc...
}));

Затем, когда вы наводите курсор на круги, воспроизводится короткий звук с этой частотой:

const audioCtx = new(window.AudioContext || window.webkitAudioContext);

circles.on("mouseover", (d, i, n) => {
    const osc = audioCtx.createOscillator();
    osc.frequency.value = d.frequency; 

Вот демонстрация (раздражающая!):

const data = d3.range(30).map(d => ({
  frequency: 500 + Math.random() * 2000,
  radius: ~~(Math.random() * 20),
  x: Math.random() * 300,
  y: Math.random() * 150
}));

const svg = d3.select("svg");

const color = d3.scaleOrdinal(d3.schemeCategory10);

const audioCtx = new(window.AudioContext || window.webkitAudioContext);

const circles = svg.selectAll(null)
  .data(data)
  .enter()
  .append("circle")
  .attr("cx", d => d.x)
  .attr("cy", d => d.y)
  .attr("r", d => d.radius)
  .style("fill", (_, i) => color(i));

circles.on("mouseover", (d, i, n) => {
  d3.select(n[i]).raise().attr("r", d => d.radius + 2);
  const osc = audioCtx.createOscillator();
  const gain = audioCtx.createGain();
  osc.type = "sine";
  osc.frequency.value = d.frequency;
  osc.connect(gain);
  gain.connect(audioCtx.destination)
  osc.start(0);
  d3.timeout(() => {
    osc.stop()
  }, 100)
}).on("mouseout", (d, i, n) => {
  d3.select(n[i]).attr("r", d => d.radius)
})
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
0

Я ссылаюсь на этот ответ отсюда. Спасибо, комментарий от Даниэля.

Поэтому я использую код try для воспроизведения звука, когда мышь над ним, и это успех

wav_phone - это папка, в которой хранится звук.

.on("mouseover",function(d){
    new Audio('wav_phone/'+d3.values(d)[0].name+'.wav').play(); 
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню