I have a slider and I only want it working when the browsers is under 640px.
So far if the browser is refreshed when the width of the browser is more than 640px, my grid is displayed correctly, if I then make the browser under 640px then the query kicks in and converts the grid to a slider, again this part works fine.
The issue with my code is when you make the browser exceed the 640px again then the query is still running and my grid is still a slider.
Here's the code:
var currentState = false;
function setSize() {
var state = $(window).width() < 640;
if (state != currentState) {
currentState = state;
if (state) {
window.sliderInit = (function (window, document, undefined) {
'use strict';
// Feature Test
if ( 'querySelector' in document && 'addEventListener' in window && Array.prototype.forEach ) {
// SELECTORS
var sliders = document.querySelectorAll('[data-slider]');
var mySwipe = Array;
// EVENTS, LISTENERS, AND INITS
// Add class to HTML element to activate conditional CSS
document.documentElement.className += ' js-slider';
// Activate all sliders
Array.prototype.forEach.call(sliders, function (slider, index) {
// SELECTORS
var slideCount = slider.querySelector('[data-slider-count]'); // Slider count wrapper
var slideNav = slider.querySelector('[data-slider-nav]'); // Slider nav wrapper
// METHODS
// Display count of slides
var createSlideCount = function () {
// Variables
var slideTotal = mySwipe[index].getNumSlides();
var slideCurrent = mySwipe[index].getPos();
// Content
if ( slideCount !== null ) {
slideCount.innerHTML = slideCurrent + ' of ' + slideTotal;
}
};
// Display Slider navigation
var createNavButtons = function () {
if ( slideNav !== null ) {
slideNav.innerHTML = '<a data-slider-nav-prev href="#">Previous</a> | <a data-slider-nav-next href="#">Next</a>';
}
};
// Stop YouTube and Vimeo videos from playing when leaving the slide
var stopVideo = function () {
var currentSlide = mySwipe[index].getPos() - 1;
var iframe = slider.querySelector( '[data-index="' + currentSlide + '"] iframe');
var video = slider.querySelector( '[data-index="' + currentSlide + '"] video' );
if ( iframe !== null ) {
var iframeSrc = iframe.src;
iframe.src = iframeSrc;
}
if ( video !== null ) {
video.pause();
}
};
// Handle next button
var handleNextBtn = function (event) {
event.preventDefault();
stopVideo();
mySwipe[index].next();
};
// Handle previous button
var handlePrevBtn = function (event) {
event.preventDefault();
stopVideo();
mySwipe[index].prev();
};
// Handle keypress
var handleKeypress = function (event) {
if ( event.keyCode == 37 ) {
mySwipe[index].prev();
}
if ( event.keyCode == 39) {
mySwipe[index].next();
}
};
// EVENTS, LISTENERS, AND INITS
// Activate Slider
mySwipe[index] = Swipe(slider, {
continuous: true,
callback: function(index, elem) {
createSlideCount(); // Update with new position on slide change
}
});
// Create slide count and nav
createSlideCount();
createNavButtons();
var btnNext = slider.querySelector('[data-slider-nav-next]'); // Next slide button
var btnPrev = slider.querySelector('[data-slider-nav-prev]'); // Previous slide button
// Toggle Previous & Next Buttons
if ( btnNext ) {
btnNext.addEventListener('click', handleNextBtn, false);
}
if ( btnPrev ) {
btnPrev.addEventListener('click', handlePrevBtn, false);
}
// Toggle Left & Right Keypress
window.addEventListener('keydown', handleKeypress, false);
});
}
})(window, document);
} else {
$('.swipe-container').removeAttr('id');
$('.swipe-container').unbind();
}
}
}
setSize();
$(window).on('resize', setSize);