Switching between playing and pausing on multiple audio tracks

I have a collection of audio files with custom play/pause buttons that I've implemented. Each audio file is assigned a dynamic class, such as custom-aud-0, custom-aud-1, custom-aud-2, and so on...

Here is my toggle function:

togglePlay(c, index) {
        this.is_playing ? this.pauseMe(c, index) : this.playMe(c, index);
    },
    playMe(c, index) {
        document.getElementsByClassName(c)[0].play();
        this.is_played = index;
        this.is_playing = true;
    },
    pauseMe(c, index) {
        document.getElementsByClassName(c)[0].pause();
        this.is_played = null;
        this.is_playing = false;
    },

The desired functionality is that when one audio plays, if another audio is initiated, the previous one should automatically pause.

However, what actually occurs is that when a new audio starts playing, the previous one continues to play in the background.

Answer №1

It is important to ensure that any audio currently playing is paused or stopped before starting a new one.

Revise your playMe function to include this consideration:

playMe(c, index) {
 if (this.is_playing) {
   this.pauseMe(this.current_c, this.is_played)
 }
 document.getElementsByClassName(c)[0].play();
 this.is_played = index;
 this.is_playing = true;
 this.current_c = c;
}

I also had to keep track of the current playing class.

A more efficient approach would be to avoid using getElementbyClassName entirely and utilize ref to obtain an array of elements for access to the underlying DOM element.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Creating a vertical column in an HTML table: The step-by-step guide

I need help creating a vertical and centered table layout. The current output is not what I expected. Expected Output https://i.sstatic.net/WL4px.png Current Output: https://i.sstatic.net/aBX6c.png I want the table to be vertical and center-aligned ...

Storing data in JSON format and retrieving it using Javascript

My challenge involves plotting a chart using values from an object's list in my view with High Chart. However, I face the issue of accessing my model from JavaScript. public class MortgageCalculator { public List<double> interest_month = new ...

Responding to a tweet with the help of twit and Node.js

Utilizing the Twit Node.js API has presented me with a challenge. I am attempting to reply to a tweet that contains a specific keyword. My goal is for my response tweet to appear nested underneath the original tweet, much like how replies function on socia ...

Using Cucumber for testing javascript-loaded content can be incredibly powerful and effective in ensuring the functionality

As I develop my Rails application, I've decided to incorporate a combination of Test Driven Development and Behavioral Driven Development into my process. The challenge arises as my app utilizes the MochaUI web application user interface framework, w ...

Update the second dropdown menu depending on the selection made in the first dropdown menu

While I know this question has been posed previously, I'm struggling to apply it to my current situation. In my MySQL database, I have a table named "subject" that includes columns for subject name and subject level. Here's an example: Subject ...

I'm in the process of constructing a create-next-app and I need to retrieve data from a web API. However, I'm unsure of the best place to securely store the API key

I am working on building a create-next-app that will retrieve data from the News Catcher API and display it within my application. I have obtained an API key to access the News Catcher API. However, I am unsure of where to securely store the API key and h ...

Child component in Vue 2 not receiving defined props

After numerous attempts, I am still struggling to successfully pass a prop down to a child component. <Project :grossMarginPerResource="grossMarginPerResource" :threshold="threshold" :orderBy="orderBy" @refetch="refetc ...

Explore interactive hover effects with jQuery and UI for a dynamic user experience!

Is it possible to initiate dragging on mouseover instead of click? Imagine a div that instantly starts dragging when hovered over. How can this be achieved? I would appreciate any guidance on how to make this happen. Thank you ...

premature submission alert on button press

I'm encountering an issue where my form is being submitted prematurely when I click on the button. The desired behavior is for the button to create a textarea upon clicking, allowing me to write in it before submitting by clicking the button again. Ho ...

Press the 'enter' button to post your tweet with Greasemonkey

I am working on a Greasemonkey script that will automatically submit a tweet when the user presses the 'enter' key. The script works perfectly on a basic HTML page with some help from tips I found on this website. However, when I attempt to use t ...

AngularJS mobile navigation menu toggle not functioning properly with the close feature

I am currently developing a simple Single Page Application (SPA) using an HTML template. The template includes a mobile navigation menu, but I am facing issues with it not closing when navigating through routes in AngularJS. Can anyone provide guidance on ...

What is the best way to find the actual position of this user within my array?

I found this example in the Vue JS documentation here When using a filtered v-for, how can I obtain the actual index of a user in the array, rather than the index of the current iteration? <div id="filter-by-example"> <ul> <li v-for= ...

Do not start Chart.js on the Y-Axis

As of now, this is the current appearance of the code which includes a Chart.js first image preview. I am seeking advice on how to prevent my data chart from starting at the Y axis. The result of the code can be viewed below. https://i.sstatic.net/sdl3K. ...

Generate a collection of items through replication

Develop a function that takes specific input and generates an array of objects with a length of 10 by incrementing the ID of each duplicate object. The first object in the output array should have "visible" set to true, while all others should have it set ...

What is the best way to change a JSON string into an array of mysterious objects?

I am currently working on a flashcard generator project and I am dealing with a JSON String that is quite complex. The JSON String contains multiple arrays and objects structured like this: data = [{"front":"What is your name?","back":"Billy"},{"front":"H ...

Guide on obtaining the screen resolution of a user's device through JavaScript

As I work on creating a website, my page contains numerous products. When a user clicks on a product, I need to display its details in a popup window. To ensure this popup window fills the entire screen, I am looking to obtain the client system's reso ...

The property 'join' is undefined for null values

I've recently started learning AngularJS, but I'm having trouble figuring out what's causing issues in my code. Despite trying various approaches, the outcome is always incorrect. <!DOCTYPE html> <html lang="en" ng-app="myApp"> ...

Making a Connection with Ajax in Django: Adding Friends

I have been exploring the capabilities of Django-Friends My goal is to make it so that when a user clicks on the add friend button, it either disappears or changes to say "Request sent". However, I am encountering an issue where the button does not disapp ...

Struggling to connect to an express route?

I'm currently working on a MERN project and I'm encountering a small issue. When trying to make a POST request to a specific route, Express throws a 404 error and tells me that it can't find the desired route. However, everything works perfe ...

It seems like KineticJS is removing elements from the canvas that I would prefer to keep

My website features an HTML5 canvas where I showcase a variety of images, text, and shapes using JavaScript functions. The text and shapes are created with the following JavaScript functions: function drawGameElements(){ /* Draw a line for the ' ...