A lightweight, dependency-free infinite scrolling carousel with grab-and-drag interaction
<div class="infinite-scroll-wrapper">
<div class="infinite-scroll-container" id="carousel1">
<div class="infinite-scroll-item">Item 1</div>
<div class="infinite-scroll-item">Item 2</div>
<div class="infinite-scroll-item">Item 3</div>
</div>
</div>
#carousel1 .infinite-scroll-item {
padding: 15px 30px;
margin-right: 20px;
border-radius: 8px;
font-size: 1.2rem;
font-weight: 500;
color: #333;
white-space: nowrap;
}
const carousel1 = new InfiniteScrollCarousel('#carousel1'); // Default settings
<div class="infinite-scroll-wrapper">
<div class="infinite-scroll-container" id="carousel5">
<div class="infinite-scroll-item image-item">
<img src="path/to/image1.jpg" alt="Description">
</div>
<div class="infinite-scroll-item image-item">
<img src="path/to/image2.jpg" alt="Description">
</div>
<!-- More items... -->
</div>
</div>
.image-item {
width: 300px;
height: 200px;
margin-right: 20px;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
transition: transform 0.3s;
}
.image-item:hover {
transform: scale(1.05);
}
.image-item img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
const carousel5 = new InfiniteScrollCarousel('#carousel5', {
speed: 40,
pauseOnHover: true,
fadeColor: 'transparent'
});
<div class="infinite-scroll-wrapper">
<div class="infinite-scroll-container" id="carousel3">
<div class="infinite-scroll-item box">1</div>
<div class="infinite-scroll-item box">2</div>
<div class="infinite-scroll-item box">3</div>
<!-- More items... -->
</div>
</div>
.box {
width: 80px;
height: 80px;
margin-right: 15px;
border: 1px solid #ff6b6b;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
font-weight: bold;
color: #ff6b6b;
box-shadow: 0 4px 10px rgba(255, 107, 107, 0.3);
}
const carousel3 = new InfiniteScrollCarousel('#carousel3', {
speed: 30,
reverseDirection: true,
pauseOnHover: false,
maxMomentumSpeed: 25,
momentumDecay: 0.98
});
<div class="skills-list">
<div class="icon-container-wrapper">
<div class="infinite-scroll-wrapper">
<div class="infinite-scroll-container" id="carousel4a">
<div class="infinite-scroll-item icon-item"><i class="fa-brands fa-python"></i> Python</div>
<div class="infinite-scroll-item icon-item"><i class="fa-brands fa-java"></i> Java</div>
<div class="infinite-scroll-item icon-item"><i class="fa-solid fa-code"></i> C#</div>
<!-- More items... -->
</div>
</div>
<div class="infinite-scroll-wrapper">
<div class="infinite-scroll-container" id="carousel4b">
<div class="infinite-scroll-item icon-item"><i class="fa-brands fa-react"></i> React Native</div>
<div class="infinite-scroll-item icon-item"><i class="fa-brands fa-android"></i> Android</div>
<!-- More items... -->
</div>
</div>
</div>
</div>
.skills-list {
padding: 20px 0;
background: #000;
}
.icon-container-wrapper {
display: flex;
flex-direction: column;
gap: 20px;
}
.icon-item {
padding: 12px 20px;
margin-right: 15px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 8px;
color: white;
font-weight: 500;
white-space: nowrap;
display: flex;
align-items: center;
gap: 8px;
box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
}
.icon-item i {
font-size: 1.2rem;
}
const carousel4a = new InfiniteScrollCarousel('#carousel4a', {
speed: 40,
reverseDirection: true,
fadeColor: '#000',
fadeWidth: 150
});
const carousel4b = new InfiniteScrollCarousel('#carousel4b', {
speed: 40,
fadeColor: '#000',
fadeWidth: 250
});