2017-03-29 4 views
0

Was ich habe, ist jetzt:getElementByTagName (a) für Autoscroll

var a = document.getElementsByTagName('a'); 

ich diese verwenden, um alle Elemente mit einem ‚a‘ zu bekommen und wenn ich scrollen es autoscrolls zum nächsten ‚a‘ Element.

Das Problem damit ist, dass ich auch Links (die eine a href="" verwenden) verwenden, so dass manchmal zu einer Verknüpfung statt einer <a name="name"></a> scrollt. Sollen sie das irgendwie beheben? Wie:

var a = document.getElementsByTagName('a name=""'); 

(dies nicht funktioniert)

Wenn vollständiger Code benötigen ich es unten hinzufügen, aber es ist wahrscheinlich nicht erforderlich.

(function() { 
    var delay = false; 

    $(document).on('mousewheel DOMMouseScroll', function (event) { 
     event.preventDefault(); 
     if (delay) return; 

     delay = true; 
     setTimeout(function() { 
      delay = false 
     }, 800); 

     var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail; 

     var a = document.getElementsByTagName('a'); 
     if (wd < 0) { 
      for (var i = 0; i < a.length; i++) { 
       var t = a[i].getClientRects()[0].top; 
       if (t >= window.innerHeight * 0.95) break; 
      } 
     } 
     else { 
      for (var i = a.length - 1; i >= 0; i--) { 
       var t = a[i].getClientRects()[0].top; 
       if (t < -window.innerHeight * 0.5) break; 
      } 
     } 
     $('html,body').animate({ 
      scrollTop: a[i].offsetTop 
     }, 800); 
    }); 
})(); 

Antwort

2

Sie QuerySelector für HTML 5 unterstützen Browser verwenden können .Sie seine Unterstützung von http://caniuse.com/#feat=queryselector überprüfen

QuerySelectorAll

document.querySelectorAll("a[name='<setname>']"); 

Für ältere Browser verwenden JQuery

$("a[name='<setname>']") 

Wenn Sie es einen bestimmten Namen nicht festlegen wollen leer einfach gehen. Der Wähler ist für beide gleich JQuery und HTML 5 querySelector

document.querySelectorAll("a[name]"); 

oder

$("a[name]") 
+0

Danke 'document.querySelectorAll (" ein [Name] ");' war was ich brauchte, also, wenn Sie Dinge wie 'name' oder' href' verwenden, müssen Sie '[....]' drumherum legen? – Minegolfer

2

Versuchen mit querySelectorAll()

document.querySelectorAll("a[name='examplename']"); 

finden eine leere

document.querySelectorAll("a[name='']"); 
+0

Ich möchte alle 'ein name = ''' bekommen, so wie mache ich das? wie 'a [name = '*']' oder so ähnlich? Entschuldigung, ich habe gerade angefangen jquery – Minegolfer

+0

@Minegolfer verwenden mit 'document.querySelectorAll (" ein [Name = ''] ");' nur mit normalen leeren keine Notwendigkeit ein '*' sehen meine aktualisierte Antwort – prasanth

+0

Sorry jemand war ein bisschen früher dann hast du mit was ich brauchte, Danke für die Zeit. – Minegolfer