mely: Javascript fehler

Beitrag lesen

Hallo mely

vielen Dank für dein Antwort. Ersmal es hat geklappt, verursacht aber andere Fehler siehe hier.

Du hast mich hier gleich zweimal falsch verstanden. ;-)

Zunächst einmal hast du zwar wie von mir empfohlen die Zeile $target = $(target); gelöscht, dann aber vergessen, die Zuweisung zwei Zeilen weiter unten auch anzupassen:

'scrollTop' : $(target).offset( ).top // und nicht $target.offset( ).top ! :-)

Hallo, ich schäme mich eigentlich nochmal zu fragen, aber die Zeile


> 'scrollTop' : $(target).offset( ).top 
> ~~~

ist/war genau so und habe da nichts verändert. Das ganze sieht so aus:

~~~js
$(document).ready(function () {

$(document).ready(function ( ) {
  $(".fancybox").fancybox({
    helpers : {
      overlay : {
        locked : false
      }
    }
  });        
  $(".fancybox").on("click", function ( ) {
    $(".fancybox").fancybox({
      openEffect : 'none',
      closeEffect : 'none'
    });
  });
});

    
      $("#mobile-icon").click(function(){
        $("nav").addClass("navTest");
    });
$(".zoom-demo").spritezoom({
					fadeInSpeed  : 200,
					fadeOutSpeed : 100,  // general element fade out speed
					behavior     : "hover", 
					// "inner", "top", "right", "bottom", "left", "magnify" or empty
					layout       : "magnify",
					// magnifying glass appearance
					border       : 4,
					magSize      : 0.8,
					}); 
        $(document).on("scroll", onScroll);
       
        $('nav a[href^="#"]').on('click', function (e) {
                        e.preventDefault();
                        $(document).off("scroll");
 
                       $('nav a').each(function () {
                                $(this).removeClass('active');
                                 $("nav").removeClass("navTest");
                        })
                        $(this).addClass('active');
 
                        var target = this.hash;
                        $('html, body').stop().animate({
                                'scrollTop': $target.offset().top
                        }, 500, 'swing', function () {
                                window.location.hash = target;
                                $(document).on("scroll", onScroll);
                        });
                });
        });
 
        function onScroll(event){
                var scrollPosition = $(document).scrollTop();
                $('nav a').each(function () {
                        var currentLink = $(this);
                        var refElement = $(currentLink.attr("href"));
                         if (refElement.offset().top <= scrollPosition + 5) {
                                $('nav ul li a').removeClass("active");
                                currentLink.addClass("active");
                        }
                });
}

document.addEventListener('DOMContentLoaded', function ( ) {
	if (document.documentElement.scrollTop !== 0) {
    onScroll( );
  }
  if (window.innerWidth < 500) {
    var a = document.querySelectorAll('a.fancybox');
    var len = a.length, i;
    for (i = 0; i < len; i += 1) {
      a[i].removeAttribute('class');
      a[i].removeAttribute('href');
    }
  }
});

Dazu hast du in deiner Handlerfunktion für DOMContentLoaded die if-Anweisung die da vorher drin stand gelöscht und alles in den Block der neuen Anweisung geschrieben, aber ich meinte, dass du nur den Funktionsaufruf von onScroll von der Bedingung abhängig machen solltest, dass die Seite nach dem Neuladen automatisch gescrollt wurde:

document.addEventListener('DOMContentLoaded', function ( ) {
  if (document.documentElement.scrollTop !== 0) {
    onScroll( );
  }
  if (window.innerWidth < 500) {
    var a = document.querySelectorAll('a.fancybox');
    var len = a.length, i;
    for (i = 0; i < len; i += 1) {
      a[i].removeAttribute('class');
      a[i].removeAttribute('href');
    }
  }
});

hier habe dich ja ganz falsch verstanden:/

Der andere if-Anweisung kann doch ruhig so bleiben wie sie war, das ist ja eine andere Baustelle.

Und was meintest du unter Vollzitate zu vermeiden? Ich verstehe es nicht.

Du zitierst immer den kompletten Beitrag, auf den du antwortest. Das nennt man ‚Vollzitat‘ und das erschwert das Lesen deiner Beiträge, also bitte vermeide das, indem du die Teile des Beitrags, auf die du dich nicht konkret beziehst, aus deiner Antwort löschst, so wie ich hier in diesem Beitrag ja auch nur einen bestimmten Teil deines Beitrags zitiere. ;-)

Ok, ich versuche es zu ändern :)

Viele Grüße,

Orlok