Initial commit of slide manager plugin
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
/**
|
||||
* HSSM Slider JavaScript
|
||||
* Handles navigation and autoplay for the [hssm_slider] shortcode
|
||||
* Custom classes version
|
||||
*/
|
||||
(function($) {
|
||||
'use strict';
|
||||
|
||||
var HSSMSlider = function(container) {
|
||||
this.$container = $(container);
|
||||
this.$track = this.$container.find('.hssm-track');
|
||||
this.$slides = this.$container.find('.hssm-slide');
|
||||
this.slideCount = this.$slides.length;
|
||||
this.currentIndex = 0;
|
||||
this.autoplay = this.$container.data('autoplay') === true || this.$container.data('autoplay') === 'true';
|
||||
this.interval = parseInt(this.$container.data('interval')) || 5000;
|
||||
this.timer = null;
|
||||
|
||||
if (this.slideCount <= 1) return;
|
||||
|
||||
this.init();
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.init = function() {
|
||||
var self = this;
|
||||
|
||||
// Arrows
|
||||
this.$container.find('.hssm-arrow-next').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
self.stopAutoplay();
|
||||
self.next();
|
||||
self.startAutoplay();
|
||||
});
|
||||
|
||||
this.$container.find('.hssm-arrow-prev').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
self.stopAutoplay();
|
||||
self.prev();
|
||||
self.startAutoplay();
|
||||
});
|
||||
|
||||
// Touch swipe support
|
||||
var touchStartX = 0;
|
||||
var touchStartY = 0;
|
||||
|
||||
this.$container.on('touchstart', function(e) {
|
||||
touchStartX = e.originalEvent.touches[0].pageX;
|
||||
touchStartY = e.originalEvent.touches[0].pageY;
|
||||
});
|
||||
|
||||
this.$container.on('touchend', function(e) {
|
||||
var touchEndX = e.originalEvent.changedTouches[0].pageX;
|
||||
var touchEndY = e.originalEvent.changedTouches[0].pageY;
|
||||
|
||||
// Calculate distance
|
||||
var dx = touchStartX - touchEndX;
|
||||
var dy = touchStartY - touchEndY;
|
||||
|
||||
// Only swipe if horizontal movement is greater than vertical (prevents swipe on scroll)
|
||||
if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 50) {
|
||||
if (dx > 0) {
|
||||
self.next();
|
||||
} else {
|
||||
self.prev();
|
||||
}
|
||||
self.stopAutoplay();
|
||||
self.startAutoplay();
|
||||
}
|
||||
});
|
||||
|
||||
this.startAutoplay();
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.update = function() {
|
||||
var offset = -this.currentIndex * 100;
|
||||
this.$track.css('transform', 'translateX(' + offset + '%)');
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.next = function() {
|
||||
this.currentIndex = (this.currentIndex + 1) % this.slideCount;
|
||||
this.update();
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.prev = function() {
|
||||
this.currentIndex = (this.currentIndex - 1 + this.slideCount) % this.slideCount;
|
||||
this.update();
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.startAutoplay = function() {
|
||||
if (!this.autoplay) return;
|
||||
var self = this;
|
||||
this.timer = setInterval(function() {
|
||||
self.next();
|
||||
}, this.interval);
|
||||
};
|
||||
|
||||
HSSMSlider.prototype.stopAutoplay = function() {
|
||||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.hssm-slider-container').each(function() {
|
||||
new HSSMSlider(this);
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user