JQuery гладкий свиток к якорю?

Есть ли способ прокрутить вниз ссылку привязки с помощью jQuery?

Вроде:

$(document).ready(function(){
  $("#gotomyanchor").click(function(){
      $.scrollSmoothTo($("#myanchor"));
  });
});

?

Ответ 1

Вот как я это делаю:

    var hashTagActive = "";
    $(".scroll").on("click touchstart" , function (event) {
        if(hashTagActive != this.hash) { //this will prevent if the user click several times the same link to freeze the scroll.
            event.preventDefault();
            //calculate destination place
            var dest = 0;
            if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
                dest = $(document).height() - $(window).height();
            } else {
                dest = $(this.hash).offset().top;
            }
            //go to destination
            $('html,body').animate({
                scrollTop: dest
            }, 2000, 'swing');
            hashTagActive = this.hash;
        }
    });

Тогда вам просто нужно создать свой якорь следующим образом:

<a class="scroll" href="#destination1">Destination 1</a>

Вы можете увидеть это на моем веб-сайте.
Демо также доступно здесь: http://jsfiddle.net/YtJcL/

Ответ 2

Я бы использовал простой фрагмент кода из CSS-Tricks.com:

$(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
        }, 1000);
        return false;
      }
    }
  });
});

Источник: http://css-tricks.com/snippets/jquery/smooth-scrolling/

Ответ 4

jQuery.scrollTo будет делать все, что вам нужно, и многое другое!

Вы можете передавать всевозможные вещи:

  • Необработанное число
  • Строка ('44 ',' 100px ',' + = 30px 'и т.д.)
  • Элемент DOM (логически, дочерний элемент прокручиваемого элемента)
  • Селектор, который будет относиться к прокручиваемому элементу
  • Строка 'max' для прокрутки до конца.
  • Строка, определяющая процент прокрутки к той части контейнера (f.e: 50% переходит к * в середину).
  • A hash {top: x, left: y}, x и y может быть любым типом числа/строки, как указано выше.

Ответ 5

Вот код, который я использовал для быстрого привязки прокрутки jQuery ко всем привязным ссылкам:

// Smooth scroll
$('a[href*=#]').click(function () {
    var hash = $(this).attr('href');
    hash = hash.slice(hash.indexOf('#') + 1);
    $.scrollTo(hash == 'top' ? 0 : 'a[name='+hash+']', 500);
    window.location.hash = '#' + hash;
    return false;
});

Ответ 6

Мне нужна версия, которая работала для <a href="#my-id"> и <a href="/page#my-id">

<script>        
    $('a[href*=#]:not([href=#])').on('click', function (event) {
        event.preventDefault();
        var element = $(this.hash);
        $('html,body').animate({ scrollTop: element.offset().top },'normal', 'swing');
    });
</script>

Ответ 7

Попробуйте это. Это код из трюков CSS, который я модифицировал, он довольно прямолинейный и выполняет горизонтальную и вертикальную прокрутку. Требуется JQuery. Вот демон

$(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-10, scrollLeft:target.offset().left-10
        }, 1000);
        return false;
      }
    }
  });
});

Ответ 8

Использование hanoo script Я создал функцию jQuery:

$.fn.scrollIntoView = function(duration, easing) {
    var dest = 0;
    if (this.offset().top > $(document).height() - $(window).height()) {
        dest = $(document).height() - $(window).height();
    } else {
        dest = this.offset().top;
    }
    $('html,body').animate({
        scrollTop: dest
    }, duration, easing);
    return this;
};

использование:

$('#myelement').scrollIntoView();

Значение по умолчанию для продолжительности и ослабления составляет 400 мс и "качание".

Ответ 9

Я использовал на своем сайте следующее:

$(document).ready(function(){
$('a[href^="#"]').on('click',function (e) {
    e.preventDefault();

    var target = this.hash,
    $target = $(target);

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top
    }, 1200, 'swing', function () {
        window.location.hash = target;
    });
});

});

Вы можете изменить скорость прокрутки, изменив используемую по умолчанию "1200", она работает достаточно хорошо на большинстве браузеров.

после помещения кода между тегом <head> </head> вашей страницы, вам нужно будет создать внутреннюю ссылку в теге <body>:

<a href="#home">Go to Home</a>

Надеюсь, что это поможет!

Ps: Не забудьте позвонить:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>

Ответ 10

Я использовал плагин Smooth Scroll, http://plugins.jquery.com/smooth-scroll/. С этим плагином все, что вам нужно включить, это ссылка на jQuery и на код плагина:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="javascript/smoothscroll.js"></script>

(ссылки должны иметь класс smoothScroll для работы).

Еще одна особенность Smooth Scroll заключается в том, что имя ancor не отображается в URL-адресе!

Ответ 11

работы

$('a[href*=#]').each(function () {
    $(this).attr('href', $(this).attr('href').replace('#', '#_'));
    $(this).on( "click", function() {

        var hashname = $(this).attr('href').replace('#_', '');

        if($(this).attr('href') == "#_") {
            $('html, body').animate({ scrollTop: 0 }, 300);
        }
        else {
            var target = $('a[name="' + hashname + '"], #' + hashname),
                targetOffset = target.offset().top;
            if(targetOffset >= 1) {
                $('html, body').animate({ scrollTop: targetOffset-60 }, 300);
            }
        }
    });
});

Ответ 12

Мне не нравится добавлять в свой код классы с функциями именования, поэтому вместо этого я помещаю это вместе. Если бы я прекратил использовать гладкую прокрутку, я бы чувствовал себя хорошо, чтобы пройти через мой код и удалить все элементы class= "scroll". Используя этот метод, я могу прокомментировать 5 строк JS и все обновления сайта.:)

<a href="/about">Smooth</a><!-- will never trigger the function -->
<a href="#contact">Smooth</a><!-- but he will -->
...
...
<div id="contact">...</div>


<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
    // Smooth scrolling to element IDs
    $('a[href^=#]:not([href=#])').on('click', function () {
        var element = $($(this).attr('href'));
        $('html,body').animate({ scrollTop: element.offset().top },'normal', 'swing');
        return false;
    });
</script>

Требования:
1. Элементы <a> должны иметь атрибут href, начинающийся с # и больше, чем просто #
2. Элемент на странице с соответствующим атрибутом id

Что он делает:
1. Функция использует значение href для создания объекта anchorID
     - В примере это $('#contact'), /about начинается с /
2. HTML и BODY анимируются на верхнее смещение anchorID
   - скорость = 'нормальная' ( "быстрая", "медленная", миллисекунды)

     - easing = 'swing' ('linear' и т.д. google easing)
3. return false - он не позволяет браузеру отображать хэш в URL-адресе
   - script работает без него, но это не так гладко.