Migrating from v2 to v3
BoxSlider v3 introduces progressive drag transitions, allowing users to see real-time visual feedback as they drag slides. This guide covers the breaking changes and how to update your code.
What's New in v3
- Progressive drag transitions - Users see slides move as they drag, not just after releasing
- New events -
progressandcancelevents for tracking drag state
Breaking Changes
Custom Effects
If you have custom effects, the transition() method has been replaced with prepareTransition().
Before (v2):
const effect = {
initialize(el, slides, options) {
// Setup code
},
transition({ slides, currentIndex, nextIndex, speed }) {
// Transition logic
slides[currentIndex].style.opacity = '0'
slides[nextIndex].style.opacity = '1'
},
}
After (v3):
import { createProgressiveTransition } from '@boxslider/slider'
const effect = {
initialize(el, slides, options) {
// Setup code (unchanged)
},
prepareTransition({ slides, currentIndex, nextIndex, speed }) {
const currentSlide = slides[currentIndex]
const nextSlide = slides[nextIndex]
return createProgressiveTransition({
elements: [currentSlide, nextSlide],
speed,
onComplete: async () => {
currentSlide.style.opacity = '0'
nextSlide.style.opacity = '1'
},
onFinish: () => {
currentSlide.style.opacity = '0'
nextSlide.style.opacity = '1'
},
onReset: () => {
currentSlide.style.opacity = '1'
nextSlide.style.opacity = '0'
},
})
},
}
Progressive Transition Callbacks
The createProgressiveTransition helper accepts these optional callbacks:
| Callback | Purpose |
|---|---|
onProgress(progress) | Update visuals during drag (progress: 0-1) |
onComplete(fromProgress, remainingDuration) | Animate to end state |
onCancel(fromProgress, remainingDuration) | Animate back to start |
onFinish() | Set final CSS state |
onReset() | Reset to initial CSS state |
Only implement the callbacks your effect needs.
Adding Progressive Drag Support
To support progressive drag (optional but recommended), implement onProgress:
onProgress: (progress) => {
currentSlide.style.opacity = String(1 - progress)
nextSlide.style.opacity = String(progress)
},
Vertical Swipe Direction
Effects that need vertical swipe gestures should add the swipeDirection property:
const effect = {
get swipeDirection() {
return 'vertical' // or 'horizontal' (default)
},
// ...
}
What's Unchanged
These APIs remain the same in v3:
- BoxSlider options - All options (
autoScroll,speed,timeout, etc.) - BoxSlider methods -
next(),prev(),skipTo(),play(),pause(),destroy(),reset() - Existing events -
before,after,play,pause,reset,destroy - Effect
initialize()method - Same signature - Effect
destroy()method - Same signature - Web component attributes - All attributes unchanged
- React component props - All props unchanged
New Events
v3 adds two new events for tracking progressive transitions:
// Fires during drag with progress percentage
slider.addEventListener('progress', ({ currentIndex, nextIndex, progress }) => {
console.log(`Dragging to slide ${nextIndex}: ${progress}%`)
})
// Fires when drag is cancelled
slider.addEventListener('cancel', ({ currentIndex, nextIndex }) => {
console.log(`Cancelled transition to slide ${nextIndex}`)
})
Quick Migration Checklist
- Using built-in effects only? No changes needed.
- Have custom effects? Update
transition()toprepareTransition()usingcreateProgressiveTransition. - Need vertical swipe? Add
swipeDirection: 'vertical'to your effect. - Want drag feedback? Implement
onProgresscallback in your effect.
If you find BoxSlider helpful, please consider giving it a star on GitHub
Star BoxSlider