2016-08-06 17 views
0

Neu in Javascript, versuchen, ein einfaches Programm zu erstellen, das zum div scrollt, wenn Navigationselement angeklickt wird. Aber es funktioniert nicht, ich kann nicht herausfinden warum. HierScrolling Page mit jQuery funktioniert nicht

ist das Snippet:

 $(document).ready(function() { 
 
     alert("asda"); 
 
    
 
     setBindings(); 
 
    }); 
 
    
 
    function setBindings() { 
 
     $("nav a").click(function(e) { 
 
     // stops the a tags for working.. i.e. clicking to another page. Functions stops the functionality. 
 
     var sectionID = e.currentTarget.id + "Section"; 
 
     alert('button id ' + sectionID); 
 
    
 
     $("html body").animate({ 
 
      scrollTop: $("#" + sectionID).offset().top 
 
     }, 1000) 
 
     }) 
 
    
 
     }) 
 
    }
<nav class="clearfix"> 
 
\t \t \t <div class="logo-container"> 
 
\t \t \t \t <i><h2><b>DELIVERY MOTION</b></h2></i> 
 

 
\t \t \t </div> 
 

 
\t \t \t <ul class="clearfix"> 
 
\t \t \t \t <li><a id="delivery" href="#">Delivery</a></li> 
 
\t \t \t \t <li><a id="about" href="#">About Us</a></li> 
 
\t \t \t \t <li><a href="#">Services</a></li> 
 
\t \t \t \t <li><a href="#">FAQ</a></li> 
 
\t \t \t \t <li><a href="#">Contact</a></li> 
 

 
\t \t \t \t <li><a href="#">Login</a></li> 
 

 
\t \t \t </ul> 
 

 

 

 
\t \t \t <a href="#" id="pull">Menu</a> 
 
\t \t </nav> 
 

 

 
    <div id="deliverySection"> 
 
\t \t <h1> Order anything from anywhere in Karachi instantly at your doorstep. </h1><hr> 
 
\t \t <div id='fee-estimate-box'> 
 
\t \t \t <form id='fee-estimate-form' action="#"> 
 
\t \t \t \t \t <legend id='delivery-text'>Delivery Fee Calculator</legend> 
 
\t \t \t \t \t <span>FROM </span> <input type="text" name="firstname" value="PICKUP ADDRESS"> 
 
\t \t \t \t \t <span>TO </span> <input type="text" name="lastname" value="DROP ADDRESS"> 
 
\t \t \t \t \t <span>ESTIMATED FEE </span> <input type="text" name="estimated-fee" value="0.00 PKR"> 
 
\t \t \t \t \t <input class='btn-submit' type="submit" value="BOOK NOW!"> 
 
\t \t \t </form> 
 

 
\t \t </div> 
 
\t \t <div id='silver-bar'> 
 
\t \t \t <img src='img/red-car.png' alt='fast deliver'> 
 
\t \t </div> 
 
\t </div> 
 
\t <div id="aboutSection"> 
 
\t \t <h2> How it works </h2> 
 
\t \t <div class="container"> 
 
\t \t <div class="row"> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/map-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Search </h3> 
 
\t \t \t \t \t <h4>Select pickup address </h4> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2"> 
 
\t \t \t \t \t <br><br> 
 
\t \t \t \t \t <img src='img/arrow-up.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/delivery-icon.png' width="50px" height="50px" class="order-icon-img"> 
 
\t \t \t \t \t <h3> Order</h3> 
 
\t \t \t \t \t <h4>Make a booking online </h4> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2"> 
 
\t \t \t \t \t <br> 
 
\t \t \t \t \t <img src='img/arrow-down.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/truck-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Delivered</h3> 
 
\t \t \t \t \t <h4>Instant courier delivery</h4> 
 
\t \t \t \t </div> 
 
\t \t </div> 
 
\t \t </div> 
 
\t </div>

Zuerst dachte ich, das Problem mit meinem Jquery war jedoch seine Arbeit gut. Die Links zu Javascript sind auch korrekt. Ich habe versucht, die Animate-Funktion zu überprüfen, aber ich kann das Problem nicht identifizieren. Irgendwelche Ideen?

+0

Es sollte ein Komma zwischen 'html' und' body' in Ihrem 'setBindings()' Funktion sein. – agdhruv

Antwort

1

$ ("html body") von $ ersetzt werden muss ("html, body") für die Rolle zu auslösen. Sie hatten auch einen Fehler in Ihrem Javascript, noch eine '})' am Ende. Jetzt ist das in Ordnung. Überprüfen Sie Ihre Konsole auf solche Fehler oder verwenden Sie Snippets, wie in Ihrer Frage.

$(document).ready(function() { 
 
    // alert("asda"); 
 
    
 
     setBindings(); 
 
    }); 
 
    
 
    function setBindings() { 
 
     $("nav a").click(function(e) { 
 
    
 
     var sectionID = e.currentTarget.id + "Section"; 
 
     // alert('button id ' + sectionID+ $("#" + sectionID).offset().top); 
 
    
 
     $("html,body").animate({ 
 
      scrollTop: $("#" + sectionID).offset().top 
 
     }, 1000); 
 
     }) 
 
    
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav class="clearfix"> 
 
\t \t \t <div class="logo-container"> 
 
\t \t \t \t <i><h2><b>DELIVERY MOTION</b></h2></i> 
 

 
\t \t \t </div> 
 

 
\t \t \t <ul class="clearfix"> 
 
\t \t \t \t <li><a id="delivery" href="javascript:;">Delivery</a></li> 
 
\t \t \t \t <li><a id="about" href="javascript:;">About Us</a></li> 
 
\t \t \t \t <li><a href="javascript:;">Services</a></li> 
 
\t \t \t \t <li><a href="javascript:;">FAQ</a></li> 
 
\t \t \t \t <li><a href="javascript:;">Contact</a></li> 
 

 
\t \t \t \t <li><a href="javascript:;/">Login</a></li> 
 

 
\t \t \t </ul> 
 

 

 

 
\t \t \t <a href="#" id="pull">Menu</a> 
 
\t \t </nav> 
 

 

 
    <div id="deliverySection"> 
 
\t \t <h1> Order anything from anywhere in Karachi instantly at your doorstep. </h1><hr> 
 
\t \t <div id='fee-estimate-box'> 
 
\t \t \t <form id='fee-estimate-form' action="#"> 
 
\t \t \t \t \t <legend id='delivery-text'>Delivery Fee Calculator</legend> 
 
\t \t \t \t \t <span>FROM </span> <input type="text" name="firstname" value="PICKUP ADDRESS"> 
 
\t \t \t \t \t <span>TO </span> <input type="text" name="lastname" value="DROP ADDRESS"> 
 
\t \t \t \t \t <span>ESTIMATED FEE </span> <input type="text" name="estimated-fee" value="0.00 PKR"> 
 
\t \t \t \t \t <input class='btn-submit' type="submit" value="BOOK NOW!"> 
 
\t \t \t </form> 
 

 
\t \t </div> 
 
\t \t <div id='silver-bar'> 
 
\t \t \t <img src='img/red-car.png' alt='fast deliver'> 
 
\t \t </div> 
 
\t </div> 
 
\t <div id="aboutSection"> 
 
\t \t <h2> How it works </h2> 
 
\t \t <div class="container"> 
 
\t \t <div class="row"> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/map-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Search </h3> 
 
\t \t \t \t \t <h4>Select pickup address </h4> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2"> 
 
\t \t \t \t \t <br><br> 
 
\t \t \t \t \t <img src='img/arrow-up.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/delivery-icon.png' width="50px" height="50px" class="order-icon-img"> 
 
\t \t \t \t \t <h3> Order</h3> 
 
\t \t \t \t \t <h4>Make a booking online </h4> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2"> 
 
\t \t \t \t \t <br> 
 
\t \t \t \t \t <img src='img/arrow-down.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/truck-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Delivered</h3> 
 
\t \t \t \t \t <h4>Instant courier delivery</h4> 
 
\t \t \t \t </div> 
 
\t \t </div> 
 
\t \t </div> 
 
\t </div>

+1

Ich habe festgestellt, dass, sobald ich auf Abschnitt klicken, scrollt, aber wenn ich wieder auf den About-Abschnitt klicke, funktioniert es nicht. Ich muss die # in der Adressleiste entfernen, dann funktioniert es ... Können Sie mir bitte sagen, warum? d. h. /DM8/index.html# <- - – Code2016

+0

"#" am Ende einer URL ist ein Anker. Er sagt dem Browser, dass er maximal nach oben scrollen kann, und kann über einen Link wie diesen hinzugefügt werden: 'Top' Anker können auch auf die ID des Elements verweisen, so dass der Browser zu diesem Element scrollt. – technico

+0

Es wäre ein wirklich einfacher Weg, um das zu tun, was Sie tun, wenn Ihr Fall keine weiteren Komplikationen hat, die Javascript erfordern. Siehe die neue Antwort. – technico

0

Versuchen Sie diese, für das Scrollen.

$('#your_image_for_the_scroll').click(function() { 
     $('body,html').animate({ 
      scrollTop: 0 
     }, 500); 
    }); 

Dieses Bild nach Benutzer etwas nicht nach unten scrollen, erscheinen könnte:

$(window).scroll(function() { 
     if ($(this).scrollTop() >= 20) {  // If page is scrolled more than 20px 
      $('#your_image_for_the_scroll').fadeIn(200); 
     } else { 
      $('#your_image_for_the_scroll').fadeOut(200); 
     } 
    }); 
0

Meistens ist es wegen der Tippfehler. Es funktioniert ohne Javascript Es gibt ein extra ) & } am Ende der Funktion

Ich habe ein JSFIDDLE erstellt und es funktioniert hier

+0

Hey ich sehe das Problem jetzt. Deine Lösung funktioniert. Ich habe jedoch festgestellt, dass, wenn ich auf Abschnitt klicken, scrollt, aber wenn ich erneut auf den About-Abschnitt klicke, funktioniert es nicht. Ich muss die # in der Adressleiste entfernen, dann funktioniert es ... Können Sie mir bitte sagen, warum? also /DM8/index.html# <- – Code2016

0

Wie OP zeigte. Wir hätten alle schlauer sein müssen, da Anker allgemein üblich sind.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav class="clearfix"> 
 
\t \t \t <div class="logo-container"> 
 
\t \t \t \t <i><h2><b>DELIVERY MOTION</b></h2></i> 
 

 
\t \t \t </div> 
 

 
\t \t \t <ul class="clearfix"> 
 
\t \t \t \t <li><a id="delivery" href="#">Delivery</a></li> 
 
\t \t \t \t <li><a id="about" href="#">About Us</a></li> 
 
\t \t \t \t <li><a href="#">Services</a></li> 
 
\t \t \t \t <li><a href="#">FAQ</a></li> 
 
\t \t \t \t <li><a href="#">Contact</a></li> 
 

 
\t \t \t \t <li><a href="#">Login</a></li> 
 

 
\t \t \t </ul> 
 

 

 

 
\t \t \t <a href="#" id="pull">Menu</a> 
 
\t \t </nav> 
 

 

 
    <div id="deliverySection"> 
 
\t \t <h1> Order anything from anywhere in Karachi instantly at your doorstep. </h1><hr> 
 
\t \t <div id='fee-estimate-box'> 
 
\t \t \t <form id='fee-estimate-form' action="#"> 
 
\t \t \t \t \t <legend id='delivery-text'>Delivery Fee Calculator</legend> 
 
\t \t \t \t \t <span>FROM </span> <input type="text" name="firstname" value="PICKUP ADDRESS"> 
 
\t \t \t \t \t <span>TO </span> <input type="text" name="lastname" value="DROP ADDRESS"> 
 
\t \t \t \t \t <span>ESTIMATED FEE </span> <input type="text" name="estimated-fee" value="0.00 PKR"> 
 
\t \t \t \t \t <input class='btn-submit' type="submit" value="BOOK NOW!"> 
 
\t \t \t </form> 
 

 
\t \t </div> 
 
\t \t <div id='silver-bar'> 
 
\t \t \t <img src='img/red-car.png' alt='fast deliver'> 
 
\t \t </div> 
 
\t </div> 
 
\t <div id="aboutSection"> 
 
\t \t <h2> How it works </h2> 
 
\t \t <div class="container"> 
 
\t \t <div class="row"> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/map-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Search </h3> 
 
\t \t \t \t \t <h4>Select pickup address </h4> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2"> 
 
\t \t \t \t \t <br><br> 
 
\t \t \t \t \t <img src='img/arrow-up.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t  <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/delivery-icon.png' width="50px" height="50px" class="order-icon-img"> 
 
\t \t \t \t \t <h3> Order</h3> 
 
\t \t \t \t \t <h4>Make a booking online </h4> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2"> 
 
\t \t \t \t \t <br> 
 
\t \t \t \t \t <img src='img/arrow-down.png' width="50px" height="50px" class='arrows-img'> 
 
\t \t  </div> 
 
\t \t \t \t <div class="col-sm-2" id="infobox"> 
 
\t \t \t \t \t <img src='img/truck-icon.png' width="50px" height="50px"> 
 
\t \t \t \t \t <h3> Delivered</h3> 
 
\t \t \t \t \t <h4>Instant courier delivery</h4> 
 
\t \t \t \t </div> 
 
\t \t </div> 
 
\t \t </div> 
 
\t </div>