Files
fizzy/app/javascript/controllers/drag_and_strum_controller.js
T
2025-09-25 16:29:45 -05:00

47 lines
1.2 KiB
JavaScript

import { Controller } from "@hotwired/stimulus"
import { post } from "@rails/request.js"
import { nextFrame } from "helpers/timing_helpers"
const MANDOLIN_NOTES = [
"/audio/mandolin/B3.mp3",
"/audio/mandolin/C3.mp3",
"/audio/mandolin/D4.mp3",
"/audio/mandolin/E3.mp3",
"/audio/mandolin/Fsharp4.mp3",
"/audio/mandolin/G3.mp3"
]
export default class extends Controller {
static targets = [ "container" ]
connect() {
this.preloadedAudioFiles = MANDOLIN_NOTES.map(file => {
const audio = new Audio(file)
audio.load()
return audio
});
}
dragEnter(event) {
event.preventDefault()
const container = this.#containerContaining(event.target)
if (!container) { return }
if (container !== this.sourceContainer && event.shiftKey) {
this.#playSound()
}
}
#containerContaining(element) {
return this.containerTargets.find(container => container.contains(element) || container === element)
}
#playSound() {
const randomIndex = Math.floor(Math.random() * this.preloadedAudioFiles.length)
const audio = this.preloadedAudioFiles[randomIndex]
const audioInstance = new Audio(audio.src)
audioInstance.play()
}
}