Loading repository data…
Loading repository data…
wmh / repository
ScrollBox 2.0 is a lightweight, dependency-free plugin that enables you to scroll a list of HTML elements (text, images, etc.) like a carousel slider or traditional marquee. Now available in modern ES6+ JavaScript with optional jQuery support for backward compatibility.
Version 2.0 - Modern vanilla JavaScript scrolling plugin 🎉
📦 Note: This package is available on npm as
@wmh/scrollbox. It's a modern, dependency-free vanilla JavaScript library with optional jQuery support for backward compatibility.
ScrollBox is a lightweight, zero-dependency plugin that enables you to scroll a list of HTML elements (text, images, etc.) like a carousel slider or traditional marquee. Built with modern ES6+ JavaScript with optional jQuery support for backward compatibility.
npm install @wmh/scrollbox
Note: This is a modern vanilla JavaScript library with zero dependencies! Optional jQuery wrapper included for backward compatibility.
<script src="https://cdn.jsdelivr.net/npm/@wmh/scrollbox@2/dist/scrollbox.min.js"></script>
Download scrollbox.js or jquery.scrollbox.js from this repository.
git clone https://github.com/wmh/scrollbox.git
<script src="scrollbox.js"></script>
<div id="demo" class="scroll-text">
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</div>
.scroll-text {
width: 300px;
height: 100px;
overflow: hidden;
}
const element = document.getElementById('demo');
const scrollbox = new ScrollBox(element, {
direction: 'vertical',
autoPlay: true
});
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="jquery.scrollbox.js"></script>
$('#demo').scrollbox({
direction: 'vertical',
autoPlay: true
});
const scrollbox = new ScrollBox(element, options);
// Trigger events
element.dispatchEvent(new Event('forward'));
element.dispatchEvent(new Event('backward'));
element.dispatchEvent(new CustomEvent('resetClock', { detail: { delay: 5 } }));
element.dispatchEvent(new CustomEvent('speedUp', { detail: { speed: 16 } }));
element.dispatchEvent(new CustomEvent('speedDown', { detail: { speed: 64 } }));
element.dispatchEvent(new CustomEvent('updateConfig', {
detail: { autoPlay: false, speed: 50 }
}));
// Destroy instance
scrollbox.destroy();
$('#demo').trigger('forward');
$('#demo').trigger('backward');
$('#demo').trigger('resetClock', [5]);
$('#demo').trigger('speedUp', [16]);
$('#demo').trigger('speedDown', [64]);
$('#demo').trigger('updateConfig', [{ autoPlay: false }]);
Your existing code should work with minimal changes. Just update to the latest version.
// Old jQuery way
$('#demo').scrollbox({ direction: 'vertical' });
$('#demo').trigger('forward');
// New vanilla JS way
const scrollbox = new ScrollBox(document.getElementById('demo'), {
direction: 'vertical'
});
document.getElementById('demo').dispatchEvent(new Event('forward'));
http://wmh.github.io/scrollbox/
| Option | Type | Default | Description |
|---|---|---|---|
linear | Boolean | false | Use linear scrolling animation |
startDelay | Number | 2 | Initial delay before scrolling starts (seconds) |
delay | Number | 3 | Delay between scroll events (seconds) |
step | Number | 5 | Distance of each step in pixels (for linear mode) |
speed | Number | 32 | Animation speed in milliseconds |
switchItems | Number | 1 | Number of items to switch per scroll |
direction | String | 'vertical' | Scroll direction: 'vertical' or 'horizontal' |
distance | String/Number | 'auto' | Scroll distance or 'auto' |
autoPlay | Boolean | true | Enable auto-scrolling |
onMouseOverPause | Boolean | true | Pause on mouse hover |
infiniteLoop | Boolean | true | Enable infinite looping |
switchAmount | Number | 0 | Total switches before stopping (0 = infinite) |
afterForward | Function | null | Callback after forward scroll |
afterBackward | Function | null | Callback after backward scroll |
triggerStackable | Boolean | false | Allow stacking trigger events |
const scrollbox = new ScrollBox(document.getElementById('demo'), {
infiniteLoop: false,
switchAmount: 3
});
const scrollbox = new ScrollBox(document.getElementById('demo'), {
afterForward: function(data) {
console.log('Scrolled forward', data.switchCount);
if (data.switchCount >= 3) {
// Trigger backward
const event = new Event('backward');
this.dispatchEvent(event);
}
},
afterBackward: function(data) {
console.log('Scrolled backward', data);
}
});
const scrollbox = new ScrollBox(document.getElementById('demo'), {
autoPlay: false
});
// Control with buttons
document.getElementById('forward-btn').addEventListener('click', () => {
const event = new Event('forward');
document.getElementById('demo').dispatchEvent(event);
});
document.getElementById('backward-btn').addEventListener('click', () => {
const event = new Event('backward');
document.getElementById('demo').dispatchEvent(event);
});
// Non-infinite loop
$('#demo').scrollbox({
infiniteLoop: false,
switchAmount: 3
});
// With callbacks
$('#demo').scrollbox({
afterForward: function (data) {
console.log(data.currentFirstChild);
if (data.switchCount >= 3) {
$(this).trigger('backward');
}
},
afterBackward: function (data) {
console.log(data);
}
});
// Manual controls
$('#forward-btn').click(function() {
$('#demo').trigger('forward');
});
$('#backward-btn').click(function() {
$('#demo').trigger('backward');
});
If you find ScrollBox helpful, consider sponsoring me on GitHub ☕ Your support helps maintain and improve this project!
jQuery Scrollbox is open-sourced software licensed under the MIT license