2016-05-21 12 views
0

Ich habe eine JQuery Funktion, die reibungslose Scrolling mit JQuery erleichtern sollte, aber es funktioniert nicht und ich kann nicht scheinen, den Fehler zu finden.Smooth Scrolling mit Lockerung funktioniert nicht

Der Code für die Funktion ist

$(function(){ 
    $('a[href*=#]').click(function() { 
     if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) { 
      var $target = $(this.hash); 
      $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']'); 
      if ($target.length) { 
       var targetOffset = $target.offset().top; 
       $(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'}); 
       return false; 
      } 
     } 
    }); 
}); 

ich ein JSFiddle mit der Funktion in einem Exempel zu geben. (Ich habe den Code für die JQuery Lockerung)

Hier ist eine ähnliche Funktion in JSFiddle jedoch, auch wenn dieser funktioniert, enthält es nicht die Option, Easing zu verwenden. Ich würde bei der Festsetzung des Problems

bearbeiten

jede Hilfe dankbar, um zu erweitern, was ich damit meine, nicht funktioniert; Es gibt keine Animation, wenn die Links angeklickt werden, es wird sofort zu dieser Stelle auf der Seite geblättert.

Antwort

1

Sie haben einige sehr seltsame Dinge hier los.

Auf der folgenden Zeile Sie einzelne doppelte Anführungszeichen statt zwei einfache Anführungszeichen

if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) { 

Auf dieser Linie, die Sie Zeichen verwenden verwenden, die

$(‘html,body’).animate() 

Am Ende nicht Apostrophe sind wir bekomme das. jsFiddle

$(function(){ 
    $('a[href*="#"]').click(function() { 
     if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
      var $target = $(this.hash); 
      $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']'); 
      if ($target.length) { 
       var targetOffset = $target.offset().top; 
       $('html,body').animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'}); 
       return false; 
      } 
     } 
    }); 
}); 

EDIT

Um Ihre Fragen in den Kommentaren dieser Antwort zu beantworten, bekommen die "#" Link arbeiten wir Ihre $target = Linie auf diese

$target = $target.length ? $target : $('html'); 

ändern und Damit der Anker auf der Seite erscheint, entfernen wir einfach die return false; aus der Funktion.

$(function() { 
    $('a[href*="#"]').click(function() { 
     var $target = $(this.hash); 
     $target = $target.length ? $target : $('html'); 
     var targetOffset = $target.offset().top; 
     $('html,body').animate({scrollTop: targetOffset}, {duration: 1600, easing: 'easeInBounce'}); 
    }); 
}); 
+0

Sie sind eine Legende – Dan

+0

Nur eine kurze Frage wissen Sie, warum es springt, wenn oben anstatt das zu tun eine glatte Scroll-up geklickt wird und warum der Link doesn‘: mit dem Code Nach dem Spiel habe ich es so weit reduziert t aktualisieren? I.e. wenn Orange angeklickt wird, ändert sich der Weblink nicht zu 'www.mywebsite.com # space-orange'? – Dan

+0

@Dan Überprüfen Sie die Bearbeitung meiner Antwort. – Clint