Getting Started
Components
- Animated Number
- Auto Submit
- Carousel
- Character Counter
- Chartjs
- Checkbox Select All
- Clipboard
- Color Picker
- Confirmation New
- Content Loader
- Dialog
- Dropdown
- Glow
- Lightbox
- Notification
- Password Visibility
- Places Autocomplete
- Popover
- Prefetch
- Rails Nested Form
- Read More
- Remote Rails
- Reveal Controller
- Scroll Progress
- Scroll Reveal
- Scroll To
- Sortable
- Sound
- Textarea Autogrow
- Timeago
Installation
Install the package
Terminal$ yarn add @stimulus-components/sound
Register the controller in your application
app/javascript/controllers/index.jsimport { Application } from '@hotwired/stimulus' import Sound from '@stimulus-components/sound' const application = Application.start() application.register('sound', Sound)
Example
Sound
Usage
app/views/index.html
<div data-controller="sound" data-sound-url-value="/path/to/your/sound.mp3">
<button type="button" data-action="sound#play">▶️ Play</button>
<button type="button" data-action="sound#pause">⏸️ Pause</button>
<button type="button" data-action="sound#reset">⏹️ Reset</button>
<button type="button" data-action="sound#muted" data-sound-muted-param="true">🔇 Mute</button>
<button type="button" data-action="sound#muted" data-sound-muted-param="false">🔈 Unmute</button>
<button type="button" data-action="sound#loop" data-sound-loop-param="true">🔁 Loop</button>
<button type="button" data-action="sound#volume" data-sound-volume-param="1">🔊 Volume to 100%</button>
<button type="button" data-action="sound#volume" data-sound-volume-param="0.25">🔉 Volume to 25%</button>
</div>
Extending Controller
You can use inheritance to extend the functionality of any Stimulus component:
app/javascript/controllers/sound_controller.js
import Sound from "stimulus-sound"
export default class extends Sound {
connect() {
super.connect()
console.log("Do what you want here.")
// The HTMLAudioElement instance.
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement
// You can fetch any attribute on it if needed.
this.sound
}
}
This controller will automatically have access to targets defined in the parent class.
If you override the connect
, disconnect
or any other methods from the parent, you'll want to call super.method()
to make sure the parent functionality is executed.