Jquery Smooth Scroll To DIV - Using ID value from Link

前端 未结 3 1298
心在旅途
心在旅途 2020-12-08 08:05

So i\'m having some issues with my JQuery which is suppose to scroll to particular divs.

HTML

相关标签:
3条回答
  • 2020-12-08 08:20

    Here is my solution:

    <!-- jquery smooth scroll to id's -->   
    <script>
    $(function() {
      $('a[href*=\\#]:not([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) {
            $('html,body').animate({
              scrollTop: target.offset().top
            }, 500);
            return false;
          }
        }
      });
    });
    </script>
    

    With just this snippet you can use an unlimited number of hash-links and corresponding ids without having to execute a new script for each.

    I already explained how it works in another thread here: https://stackoverflow.com/a/28631803/4566435 (or here's a direct link to my blog post)

    For clarifications, let me know. Hope it helps!

    0 讨论(0)
  • 2020-12-08 08:23

    You can do this:

    $('.searchbychar').click(function () {
        var divID = '#' + this.id;
        $('html, body').animate({
            scrollTop: $(divID).offset().top
        }, 2000);
    });
    

    F.Y.I.

    • You need to prefix a class name with a . (dot) like in your first line of code.
    • $( 'searchbychar' ).click(function() {
    • Also, your code $('.searchbychar').attr('id') will return a string ID not a jQuery object. Hence, you can not apply .offset() method to it.
    0 讨论(0)
  • Ids are meant to be unique, and never use an id that starts with a number, use data-attributes instead to set the target like so :

    <div id="searchbycharacter">
        <a class="searchbychar" href="#" data-target="numeric">0-9 |</a> 
        <a class="searchbychar" href="#" data-target="A"> A |</a> 
        <a class="searchbychar" href="#" data-target="B"> B |</a> 
        <a class="searchbychar" href="#" data-target="C"> C |</a> 
        ... Untill Z
    </div>
    

    As for the jquery :

    $(document).on('click','.searchbychar', function(event) {
        event.preventDefault();
        var target = "#" + this.getAttribute('data-target');
        $('html, body').animate({
            scrollTop: $(target).offset().top
        }, 2000);
    });
    
    0 讨论(0)
提交回复
热议问题