[TYPO3-german] OT jQuery - Konflikt mit zwei Scroll-Events
bernd wilke
t3ng at bernd-wilke.net
Mon Jun 29 08:56:58 CEST 2015
Am 29.06.15 um 08:35 schrieb Johannes C. Laxander:
> Hallo,
>
> ich habe auf einer OnePage-Site einmal ein Scroll-Event um ab einer
> bestimmten Position eine Nav-Bar einzublenden, und ein Click-Event, um zu
> einer bestimmten Position in der Seite zu scrollen.
>
> 1) Nav-Bar einblenden:
>
> var myPosY;
> jQuery(window).bind( 'scroll', function() {
> myPosY = jQuery(window).scrollTop();
> if ( myPosY >= 400) {
> jQuery('#topbar').fadeIn();
> } else {
> jQuery('#topbar').fadeOut();
> }
> });
>
> 2) Bei Klick zu bestimmter Position scrollen:
>
> $('#home a').click(function(e) {
> e.preventDefault();
> var t = '#' + $(e.currentTarget).attr('href').substring(1);
> var y = $(t).offset().top - $('#topbar').height();
> $('html, body').animate({scrollTop: y;}, 'slow');
> });
>
> Seit ich das zweite Event hinzugenommen habe funktioniert das erste Event
> nicht mehr. Und bei 2) wird direkt an das Ziel gesprungen, ein "langsames
> dorthingleiten" kann ich nicht feststellen.
>
> Was mache ich hier falsch? Wie kann ich den Konflikt umgehen?
es ist nicht unbedingt ein Konflikt. es ist nur so dass kein
scroll-event auftritt wenn du zu einem bestimmten Punkt der Seite
springst (auch wenn es optisch einem Scroll ähnelt).
was du brauchst ist, dass am Ende des Sprungs die Routine aufgerufen
wird, die du auch bei den Scroll-events aufrufst. Um doppelten Code zu
vermeiden solltest du aus der anonymen Funktion eine echte machen, die
du von beiden Stellen aufrufen kannst.
var myMenuFunc = function() {
var myPosY = jQuery(window).scrollTop();
:
}
jQuery(window).bind( 'scroll',myMenuFunc);
$('#home a').click(function(e) {
e.preventDefault();
var t = '#' + $(e.currentTarget).attr('href').substring(1);
var y = $(t).offset().top - $('#topbar').height();
$('html, body').animate({scrollTop: y;}, 'slow');
myMenuFunc();
});
bernd
--
http://www.pi-phi.de/cheatsheet.html
More information about the TYPO3-german
mailing list