I created my own HORIZONTAL jquery scroll-snap which gets triggered on page load, window resize, and scroll of the container – this prevents any need for css:
$(".container").scroll(function() {
The following if/else statement is if you plan to change the object’s width depending on the width of the page. If not, you can just delete it and set var width = your default width
var width = 1; //100% - default value / small screen
if(window.innerWidth >= 993) //large screen
width = 1/4; //25%
else if(window.innerWidth >= 601) //medium screen
width = 1/3; //33.333%
var containerWidth = $(".container").width();
var sectionWidth = containerWidth * width; //gets the length of each section
var currentScroll = $(".container").scrollLeft();
var farOff = currentScroll % sectionWidth; //determines how far user is from the beginning of the current section
if(farOff == 0) //just for efficiency
return;
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function() {
if(farOff >= sectionWidth/2) //scroll-snaps to next section
$(".container").animate({
scrollLeft: (currentScroll + sectionWidth - farOff),
});
else //scroll-snaps to previous section
$(".container").animate({
scrollLeft: (currentScroll - farOff),
});
}, 550));
});
Below is the CSS that goes along with my scroll snap example
div.container{
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
-o-overflow-scrolling: scroll;
-moz-overflow-scrolling: scroll;
overflow-y: hidden;
white-space: nowrap !important;
}
.container section{
display: inline-block;
padding: 10px;
width:100%;
vertical-align: top;
margin-bottom: 10px;
}
.container > section > div{
overflow: initial;
white-space: normal;
}
@media (min-width: 601px){ /* medium */
.container section{
width: 33.33333333%;
}
}
@media (min-width: 952px){ /* large */
.container section{
width: 25%;
}
}