Ich habe einen bestimmten Effekt, ich möchte für eine Website, die ich baue. Wie Sie in this website sehen können, möchte ich, dass der Bildschirm auf den nächsten Abschnitt "rastet", nachdem der Benutzer scrollt, aber nur nach (nicht der Zeitpunkt) das Scroll-Ereignis ausgelöst hat. Der Grund, warum ich ein Plugin wie panelSnap nicht verwenden möchte, ist, weil ich 1: Want kleineren Code und
2. Willst du die Website, wenn auf dem Handy angesehen, mehr von der "Instant Snap" -Effekt haben (versuchen zu reduzieren die Browsergröße auf der oben genannten Website). Ich weiß, ich theoretisch könnte versuchen, zwei Plugins, wie Panelsnap und Scrollify zu kombinieren, und aktivieren Sie sie angemessen, wenn der Browser eine bestimmte Breite ist, aber ich weiß nicht, ob ich das tun möchte ... :(
So alles das heißt, hier ist der Code:jQuery "Snap To" -Effekt
var scrollTimeout = null;
var currentElem = 0;
var options = {
scrollSpeed: 1100,
selector: 'div.panels',
scrollDelay: 500,
};
$(document).ready(function() {
var $snapElems = $(options.selector);
console.log($($snapElems[currentElem]).offset().top);
function snap() {
if ($('html, body').scrollTop() >= $($snapElems[currentElem]).offset().top) {
if (currentElem < $snapElems.length-1) {
currentElem++;
}
}else{
if (currentElem > 0) {
currentElem = currentElem - 1;
}
}
$('html, body').animate({
scrollTop: $($snapElems[currentElem]).offset().top
}, options.scrollSpeed);
}
$(window).scroll(function() {
if ($(window).innerWidth() > 766) {
if (scrollTimeout) {clearTimeout(scrollTimeout);}
scrollTimeout = setTimeout(function(){snap()}, options.scrollDelay);
}else{
//I'll deal with this later
}
});
});
Mein Problem ist, dass jedes Mal, wenn die snap
Funktion aufgerufen wird, es das Scroll-Ereignis auslöst, die es in eine Schleife führt, wo das Fenster nicht zwischen dem Scrollen stoppt erste und zweite Elemente Hier ist die schlechte, dysfunktionale Website: https://tcfchurch.herokuapp.com/index.html Vielen Dank für die Hilfe