Trüffelkrieger
Mitglied
Ich möchte etwas ähnliches machen wie dieses Skript: http://alvarotrigo.com/fullPage/#firstPage
Mit einem Unterschied: Es sollen nicht alle „Seiten“ Vollbild-groß sein. Ich möchte also zwischendurch beispielsweise zwei oder drei Texte schreiben, bei denen dann der darüber und darunter liegende Slide noch zu sehen ist.
Folgendes habe ich gebastelt beziehungsweise aus verschiedenen Quellen zusammengesucht:
So sieht der HTML-Part aus:
Kurze Erklärung: Damit nicht gleich zig Scroll-Events bei einem Maus-Scroll angefeuert werden, versuche ich es mit der throttle-Funktion von Underscore.js. Die Unterscheidung, ob es ein Scroll nach oben ist oder nach unten funktioniert problemlos.
Folgende Probleme habe ich:
Die throttle-Funktion scheint das erste Scroll-Event zu unterbinden. Ich muss also ein zweites Mal scrollen, bevor ein Scroll-Event abgegeben wird.
Als zweites scrollt die Seite dann bei jedem Scroll zu weit, da zu der berechneten Scrollweite dann noch die Strecke dazukommt, die das Mausrad sowieso „erzeugt“.
Kann ich irgendwie unterbinden, dass die Nutzung des Scrollrades eine Auswirkung auf die Verschiebung der Seite hat aber trotzdem ein Scroll-Event erzeugt?
Ich hoffe, das ganze war halbwegs verständlich ...
Mit einem Unterschied: Es sollen nicht alle „Seiten“ Vollbild-groß sein. Ich möchte also zwischendurch beispielsweise zwei oder drei Texte schreiben, bei denen dann der darüber und darunter liegende Slide noch zu sehen ist.
Folgendes habe ich gebastelt beziehungsweise aus verschiedenen Quellen zusammengesucht:
HTML:
$(function(){
var throttled = _.throttle(updatePosition, 600, {trailing: false});
$(window).scroll(throttled);
var lastScrollTop = 0, delta = 5;
var sectionNumber = 1;
var top = 0;
function updatePosition () {
var st = $(this).scrollTop();
if(Math.abs(lastScrollTop - st) <= delta)
return;
if (st > lastScrollTop){
// downscroll code
console.log('scroll down');
//$('html, body').animate({scrollTop:$('.section').eq(sectionNumber).position().top}, 'slow');
if ($('.section').eq(sectionNumber).hasClass('text')) {
var textHeight = $('.section').eq(sectionNumber).height();
var windowHeight = $(window).height();
top = top + (windowHeight / 2) - textHeight;
}
if (!$('.section').eq(sectionNumber).hasClass('text')) {
var windowHeight = $(window).height();
top = top + windowHeight;
}
var transformString = "translate3d(0px, -"+top+"px, 0px)";
$('body').css("transform", transformString);
sectionNumber = sectionNumber +1;
} else {
// upscroll code
console.log('scroll up');
}
lastScrollTop = st;
};
So sieht der HTML-Part aus:
HTML:
<section>
<figure class="section"> <img src=""> </figure>
<figure class="section"> <img src=""> </figure>
<div class="section text">
<p>Text</p>
</div>
<figure id="section" class="section"> <img src=""> </figure>
<figure class="section"> <img src=""> </figure>
<figure class="section"> <img src=""> </figure>
<figure class="section"> <img src=""> </figure>
</section>
Kurze Erklärung: Damit nicht gleich zig Scroll-Events bei einem Maus-Scroll angefeuert werden, versuche ich es mit der throttle-Funktion von Underscore.js. Die Unterscheidung, ob es ein Scroll nach oben ist oder nach unten funktioniert problemlos.
Folgende Probleme habe ich:
Die throttle-Funktion scheint das erste Scroll-Event zu unterbinden. Ich muss also ein zweites Mal scrollen, bevor ein Scroll-Event abgegeben wird.
Als zweites scrollt die Seite dann bei jedem Scroll zu weit, da zu der berechneten Scrollweite dann noch die Strecke dazukommt, die das Mausrad sowieso „erzeugt“.
Kann ich irgendwie unterbinden, dass die Nutzung des Scrollrades eine Auswirkung auf die Verschiebung der Seite hat aber trotzdem ein Scroll-Event erzeugt?
Ich hoffe, das ganze war halbwegs verständlich ...