Trouble with Bootstrap 5 Carousel swipe functionality: Issues arise when inner elements with overflow are involved, causing vertical scrolling to interfere with left to right swipes

I've been scouring the internet for answers to my unique issue with a Bootstrap 5 carousel. My setup is fairly basic, but I've removed the buttons and rely solely on swiping to navigate through the carousel items.

When I swipe left to right, everything works as expected. However, once I make the content inside the carousel vertically scrollable using CSS overflow-y set to either auto or scroll, it seems that the inner element is handling the pointer events and not passing them to the parent elements. I can't seem to find a way to force the events to propagate.

Is there something I'm overlooking? How can I make sure that the carousel-inner (or the carousel in general) continues to process swipe events even with child elements set to overflow-y?

Here's the structure of the HTML:

<div class="container pt-3 px-4">
  <div class="row">
    <div id="carouselMembers" class="carousel slide" data-controller="pool-carousel">
      <div class="carousel-inner" data-pool-carousel-target="carouselInner">
        <div class="pool-carousel-inner">
          <!-- Lengthy vertically scrolling content -->
        </div>
      </div><!-- .carousel-inner -->
    </div><!-- #carouselMembers -->
  </div><!-- .row -->
</div><!-- .container -->

And here's the corresponding CSS:

.pool-carousel-inner {
    overflow-y: auto;
}

Just to provide some additional context, I am utilizing Stimulus for other JavaScript functionalities, hence the controller attributes. Following the Bootstrap documentation, I am explicitly initializing the carousel constructor from there to enable swiping. I'm utilizing a specific inner class (pool-carousel-inner) for CSS customization as I have carousels in different sections that need to behave and look distinctively.

I've experimented with setting the width of my pool-carousel-inner class to 50% and can confirm that swiping still works on the "empty" space that isn't occupied by the inner element. This indicates that the carousel is correctly set up. However, when I attempt to swipe or drag left to right over the inner content, it seems like it's attempting to scroll the entire browser window instead of handling the interaction events within Bootstrap.

Answer №1

After some thorough investigation, I managed to discover a workaround for this issue. By closely monitoring Bootstrap's basic example and observing its class lists in the debug console, I was able to unravel the mystery, given the lack of documentation on the subject.

It appears that applying an overflow style to an element can hijack touch input control from the browser to some extent, leading to a halt in the propagation of pointer events. However, I successfully restored it by introducing a touch-action style to the inner element as follows:

Resolution

.pool-carousel-inner {
    overflow-x: hidden;
    overflow-y: auto;
    touch-action: pan-y pinch-zoom; // It is necessary to reset this often overlooked detail that Bootstrap conceals in .pointer-event, otherwise swiping functionality will be compromised
}

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

Modify css with php instead of using FTP

As I work on constructing a website, I wonder how WordPress allows its admin users to edit CSS styles through the website instead of accessing the css file directly via FTP. How exactly does WordPress load the CSS file? My assumption is that it somehow re ...

What does getsession.insert in the Ace Editor return?

Seeking clarification on the return values of the addMarker and insert functions in ace editor's edit session. The official documentation lacks detail, leaving me uncertain. Refer to the edit session API for more information. I've encountered i ...

Why are the items I have inserted inside my <div> tag not appearing on the screen?

What could be simpler than this: {this.state.dash ? <div className='dashWrapper slide'> HELLO </div> : null} I've tried everything, but nothing seems to show up inside the div. ...

Minimize ring size through mesmerizing smoke effects

I came across this stunning ring with a captivating smoke animation, but I am struggling to comprehend its design fully. My goal is to resize the ring to about 80px and maintain only a single color throughout. However, my attempts to simply reduce the siz ...

The project is not being recognized by 'webpack' when running within it

Every time I attempt to execute 'webpack' in my project, the command line shows me this error message: 'webpack' is not recognized as an internal or external command, operable program or batch file. I have installed webpack using th ...

The function jQuery[number] did not get executed

Hello, I have been researching this issue and have come across multiple solutions, but unfortunately none of them seem to work for me. I keep encountering the error message "jQuery21006460414978209883_1395689439888 was not called" when making an AJAX call ...

Is there a way to override the padding of a container?

Working with Wordpress for the first time has been quite a challenge. Adjusting to everything is causing me some major headaches. So, I've got this container div and added a lazy 10px padding. However, for the theme I'm attempting to develop, I ...

The error message "prettyPrint is not defined" indicates that the function prettyPrint

I am facing an issue with ReferenceError: prettyPrint is not defined. Can you provide some help? <a class="question helpcenterheading" href="http://www.google.com">How do I reach out to you?</a> <span class="answer">Just a moment...</ ...

Collect all the attribute values of the checkboxes that have been checked and convert them

Is there a way to retrieve the attribute values of all checked checkboxes as an XML string? <input type="checkbox" id="chkDocId1" myattribute="myval1"/> <input type="checkbox" id="chkDocId2" myattribute="myval43"/> <input type="checkbox ...

Tips on implementing JSON data into select2 plugin

I have been trying to integrate the select2 plugin into my project. I followed a tutorial from this link, but unfortunately, it's not functioning properly for me. Here is the JSON output: [ {"ime":"BioPlex TM"}, {"ime":"Aegis sym agrilla"}, ...

When trying to add a react-bootstrap modal, the react app crashes abruptly

Encountering errors while attempting to integrate react-bootstrap Modal component into my react project: ERROR in ./~/react-dom/lib/ReactDOMUnknownPropertyHook.js Module not found: Error: Cannot resolve module 'react/lib/ReactComponentTreeHook' ...

Interested in leveraging string functions on the information retrieved from the API?

I am trying to utilize String functions such as slice(x,y), length() on the data received from the API. To achieve this, I first converted the data to a variable called mystr using JSON.stringify(obj), but encountered an issue where the console displayed: ...

What is the best way to add a background image to a div using react?

My images folder contains 2 images. See the code snippet below from App.js: import "./styles.css"; import nf_logo from "./images/netflix_logo.png"; import nf_bg from "./images/netflix_bg.jpg;; const divStyle = { backgroundImag ...

What is the best way to eliminate the space between two buttons in a table row or "column"?

Below is the code snippet that I am working with. I am trying to figure out a way to eliminate the space between the buttons both horizontally and vertically. Can someone guide me on how to achieve this? <%@page contentType="text/html" pageEncodin ...

When my webpage is opened in Firefox, I notice that it automatically scrolls down upon loading

I recently embarked on the task of building a website from scratch but ran into an unusual bug in Firefox. The issue causes the page to scroll down to the first div, completely bypassing its margin. I want to clarify that I am not seeking a solution spe ...

Incorporating an HTML file into a DIV container while also displaying menu links

I am facing a major challenge with what I recognize as a relatively simple issue for experts. As someone who is still learning, I am struggling to create menu links that load an HTML file into a specific DIV. Despite my efforts, the content keeps loading i ...

The success function in Ajax is constantly elusive, while the error function prevails. The data just can't seem to make it to the destination file

Thank you for your patience. This marks my initial post to the best of my recollection. The section below showcases a snippet from my calendar.js script. My current objective involves sending data obtained from a modal window in index.php over to sql.php. ...

How can TypeORM be used to query a ManyToMany relationship with a string array input in order to locate entities in which all specified strings must be present in the related entity's column?

In my application, I have a User entity that is related to a Profile entity in a OneToOne relationship, and the Profile entity has a ManyToMany relationship with a Category entity. // user.entity.ts @Entity() export class User { @PrimaryGeneratedColumn( ...

Handling invalid JSON data using JavaScript

Looking to extract data from this URL using Javascript. Here is a sample of the JSON content: {"ss":[["Thu","7:00","Final",,"BAL","19","ATL","20",,,"56808",,"PRE4","2015"],["Thu","7:00","Final",,"NO","10","GB","38",,,"56809",,"PRE4","2015"]]} Most tutori ...

Modifying colors with Jquery

Is it possible to use CSS within JQuery to gradually change the color of a div? Additionally, how can I incorporate a second function into my <div>? Below is the code. I would like the color to revert back to its original state when the mouseout ev ...