Skip to content

Instantly share code, notes, and snippets.

@xlawok
Created March 3, 2022 09:47
Show Gist options
  • Save xlawok/19315cec43e66a0c5b555d40510205b9 to your computer and use it in GitHub Desktop.
Save xlawok/19315cec43e66a0c5b555d40510205b9 to your computer and use it in GitHub Desktop.
Vanilla JS slider with touch feature, counting slides
window.addEventListener('load', function () {
var offer_wrapper= document.querySelector('.aw-front-page-offer .slider-wrapper');
var offer_slides=offer_wrapper.querySelectorAll('.offer-slide');
var offer_s_prev = document.querySelector('.aw-front-page-offer .prev');
var offer_s_next = document.querySelector('.aw-front-page-offer .next');
if (typeof(offer_slides) != 'undefined' && offer_slides != null){
var slides_count=offer_slides.length;
var times_to_left=0;
var move_me= 0;
if(slides_count > 1){
offer_s_prev.addEventListener('click',function(e){
e.preventDefault();
if(times_to_left<slides_count-1){
times_to_left++;
move_me=(100/slides_count)*times_to_left;
offer_wrapper.style.transform="translateX(-"+move_me +"%)";
}
});
offer_s_next.addEventListener('click',function(e){
e.preventDefault();
if(times_to_left>0){
times_to_left=times_to_left-1;
move_me=(100/slides_count)*times_to_left;
offer_wrapper.style.transform="translateX(-"+move_me +"%)";
}
});
(function() {
var min_horizontal_move = 30;
var max_vertical_move = 30;
var within_ms = 1000;
var start_xPos;
var start_yPos;
var start_time;
function touch_start(event) {
start_xPos = event.touches[0].pageX;
start_yPos = event.touches[0].pageY;
start_time = new Date();
}
function touch_end(event) {
var end_xPos = event.changedTouches[0].pageX;
var end_yPos = event.changedTouches[0].pageY;
var end_time = new Date();
let move_x = end_xPos - start_xPos;
let move_y = end_yPos - start_yPos;
let elapsed_time = end_time - start_time;
if (Math.abs(move_x) > min_horizontal_move && (Math.abs(move_y) < max_vertical_move)) {
if((elapsed_time < within_ms)){
if (move_x < 0) {
if(times_to_left<slides_count-1){
times_to_left++;
move_me=(100/slides_count)*times_to_left;
offer_wrapper.style.transform="translateX(-"+move_me +"%)";
}
} else {
if(times_to_left>0){
times_to_left=times_to_left-1;
move_me=(100/slides_count)*times_to_left;
offer_wrapper.style.transform="translateX(-"+move_me +"%)";
}
}
}
}
}
var content = document.querySelector(".aw-front-page-offer");
if(content){
content.addEventListener('touchstart', touch_start);
content.addEventListener('touchend', touch_end);
}
})();
}
}
}, false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment