прокрутка jQuery до элемента

У меня есть этот input элемент:

<input type="text" class="textfield" value="" id="subject" name="subject">

Затем у меня есть некоторые другие элементы, такие как другие текстовые поля, текстовые поля и т. Д.

Когда пользователь нажимает на этот input с помощью #subject, страница должна прокручиваться до последнего элемента страницы с красивой анимацией. Это должно быть прокрутка вниз, а не вверх.

Последний элемент страницы - это кнопка submit с #submit:

<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">

Анимация не должна быть слишком быстрой и плавной.

Я использую последнюю версию jQuery. Я предпочитаю не устанавливать какие-либо плагины, а использовать для этого функции jQuery по умолчанию.


person DiegoP.    schedule 13.07.2011    source источник
comment
developer.mozilla.org/en-US/docs/Web/ API / Element / scrollIntoView   -  person Christophe Roussy    schedule 09.12.2018
comment
scrollTo был отключен для меня из-за подключаемого модуля Chrome, не уверен, какой именно.   -  person Jacksonkr    schedule 26.07.2019


Ответы (29)


Предполагая, что у вас есть кнопка с идентификатором button, попробуйте следующий пример:

$("#button").click(function() {
    $([document.documentElement, document.body]).animate({
        scrollTop: $("#elementtoScrollToID").offset().top
    }, 2000);
});

Я получил код из статьи Плавно переходите к элементу без подключаемого модуля jQuery. И я проверил это на примере ниже.

<html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function (){
            $("#click").click(function (){
                $('html, body').animate({
                    scrollTop: $("#div1").offset().top
                }, 2000);
            });
        });
    </script>
    <div id="div1" style="height: 1000px; width 100px">
        Test
    </div>
    <br/>
    <div id="div2" style="height: 1000px; width 100px">
        Test 2
    </div>
    <button id="click">Click me</button>
</html>

person Steve    schedule 13.07.2011
comment
Это не сработает во всех случаях. См. stackoverflow.com / questions / 2905867 / - person Jānis Elmeris; 25.04.2012
comment
Если вам не нужна анимация и вы хотите мгновенно перейти к элементу, используйте вместо этого .scrollTop(…) из .animate({scrollTop: …}, …). - person Rory O'Kane; 20.09.2013
comment
Если вы пытаетесь прочитать эту статью, вот рабочая ссылка: Плавная прокрутка до элемента без подключаемого модуля jQuery - person Adarsh Punj; 18.07.2021

  jQuery .scrollTo () Method

jQuery .scrollTo (): Просмотр - демонстрация, API, исходный код

Я написал этот легкий плагин, чтобы упростить прокрутку страниц / элементов. Это гибко, где вы можете передать целевой элемент или указанное значение. Возможно, это может быть частью следующего официального релиза jQuery, как вы думаете?


Примеры использования:

$('body').scrollTo('#target'); // Scroll screen to target element

$('body').scrollTo(500); // Scroll screen 500 pixels down

$('#scrollable').scrollTo(100); // Scroll individual element 100 pixels down

Параметры:

scrollTarget: элемент, строка или число, указывающее желаемую позицию прокрутки.

offsetTop: число, определяющее дополнительный интервал над целью прокрутки.

duration: строка или число, определяющее продолжительность анимации.

easing: строка, указывающая, какую функцию замедления использовать для перехода.

complete: функция, вызываемая после завершения анимации.

person Timothy Perez    schedule 05.10.2012
comment
$ ('body') не работал в FF, поэтому попробовал $ ('html, body'), который работал. - person kiranvj; 05.07.2013
comment
Если кому-то нужен этот исходный код скрипта, то здесь вы можете получить его flesler.com /jquery/scrollTo/js/jquery.scrollTo-min.js - person Arturs; 07.11.2013

Если вас не очень интересует эффект плавной прокрутки и вы просто заинтересованы в прокрутке к определенному элементу, вам не нужна какая-либо функция jQuery для этого. Javascript поможет вам:

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView

Итак, все, что вам нужно сделать, это: $("selector").get(0).scrollIntoView();

.get(0) используется, потому что мы хотим получить элемент DOM JavaScript, а не элемент DOM JQuery.

person Atharva    schedule 24.12.2013
comment
Не могли бы вы также использовать $(selector)[0]? - person RobW; 17.03.2014
comment
RobW, да, вы можете просто использовать [0], но get (0) защищает вас от неопределенных или отрицательных индексов. См. Источник: james.padolsey.com/jquery/# v = 1.10.2 & fn = jQuery.fn.get - person corbacho; 02.04.2014
comment
Если вы вообще не хотите использовать jQuery, просто используйте document.getElementById('#elementID').scrollIntoView(). Нет смысла загружать библиотеку размером ~ 100 КБ только для того, чтобы выбрать элемент и затем преобразовать его в обычный JavaScript. - person Gavin; 23.06.2014
comment
@ Гэвин, я уверен, ты имел в виду, что это должно быть: document.getElementById('elementID').scrollIntoView() - person Brian; 19.09.2014

Это достижимо без jQuery:

document.getElementById("element-id").scrollIntoView();
person object-Object    schedule 20.12.2018

Используя этот простой скрипт

if($(window.location.hash).length > 0){
        $('html, body').animate({ scrollTop: $(window.location.hash).offset().top}, 1000);
}

Сделал бы в сортировке, что если хэш-тег найден в URL-адресе, scrollTo анимируется для идентификатора. Если хэш-тег не найден, игнорируйте скрипт.

person Warface    schedule 05.09.2013

Решение Стива и Питера работает очень хорошо.

Но в некоторых случаях может потребоваться преобразовать значение в целое число. Как ни странно, возвращаемое значение из $("...").offset().top иногда находится в float.
Использование: parseInt($("....").offset().top)

Например:

$("#button").click(function() {
    $('html, body').animate({
        scrollTop: parseInt($("#elementtoScrollToID").offset().top)
    }, 2000);
});
person Tejasvi Hegde    schedule 06.02.2014

Я так и делаю.

document.querySelector('scrollHere').scrollIntoView({ behavior: 'smooth' })

Работает в любом браузере.

Его можно легко превратить в функцию

function scrollTo(selector) {
    document.querySelector(selector).scrollIntoView({ behavior: 'smooth' })
}

Here is a working example

$(".btn").click(function() {
  document.getElementById("scrollHere").scrollIntoView( {behavior: "smooth" })
})
.btn {margin-bottom: 500px;}
.middle {display: block; margin-bottom: 500px; color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button class="btn">Scroll down</button>

<h1 class="middle">You see?</h1>

<div id="scrollHere">Arrived at your destination</div>

Документы

person Edvard Åkerberg    schedule 20.06.2019
comment
Довольно коротко и мило. Следует отметить одну вещь: я думаю, что это только прокручивает его в поле зрения (может быть в нижней части окна просмотра), а не прокручивает его в верхнюю часть окна просмотра, как это делает установка scrollTop. - person OG Sean; 04.08.2019

Компактный вариант «одушевленного» решения.

$.fn.scrollTo = function (speed) {
    if (typeof(speed) === 'undefined')
        speed = 1000;

    $('html, body').animate({
        scrollTop: parseInt($(this).offset().top)
    }, speed);
};

Базовое использование: $('#your_element').scrollTo();

person Rezgar Cadro    schedule 29.08.2014

С этим решением вам не нужны никакие подключаемые модули, и не требуется настройка помимо размещения скрипта перед закрывающим тегом </body>.

$("a[href^='#']").on("click", function(e) {
  $("html, body").animate({
    scrollTop: $($(this).attr("href")).offset().top
  }, 1000);
  return false;
});

if ($(window.location.hash).length > 1) {
  $("html, body").animate({
    scrollTop: $(window.location.hash).offset().top
  }, 1000);
}

При загрузке, если в адресе есть хэш, мы прокручиваем его.

И - всякий раз, когда вы нажимаете a ссылку с хешем href, например #top, прокручиваем до него.

## Редактировать 2020

Если вам нужно решение на чистом JavaScript: вы могли бы вместо этого использовать что-то вроде:

var _scrollToElement = function (selector) {
  try {
    document.querySelector(selector).scrollIntoView({ behavior: 'smooth' });
  } catch (e) {
    console.warn(e);
  }
}

var _scrollToHashesInHrefs = function () {
  document.querySelectorAll("a[href^='#']").forEach(function (el) {
    el.addEventListener('click', function (e) {
      _scrollToElement(el.getAttribute('href'));
      return false;
    })
  })
  if (window.location.hash) {
    _scrollToElement(window.location.hash);
  }
}

_scrollToHashesInHrefs();
person Jonathan    schedule 02.08.2016

Если вы обрабатываете только прокрутку до элемента ввода, вы можете использовать focus(). Например, если вы хотите прокрутить до первого видимого ввода:

$(':input:visible').first().focus();

Или первый видимый вход в контейнере с классом .error:

$('.error :input:visible').first().focus();

Спасибо Трише Болл за указание на это!

person Benjamin Oakes    schedule 28.01.2015

Если вы хотите прокрутить внутри контейнера переполнения (вместо $('html, body'), указанного выше), работая также с абсолютным позиционированием, это способ:

var elem = $('#myElement'),
    container = $('#myScrollableContainer'),
    pos = elem.position().top + container.scrollTop() - container.position().top;

container.animate({
  scrollTop: pos
}
person a11r    schedule 23.09.2017

Простой способ добиться прокрутки страницы до целевого идентификатора div

var targetOffset = $('#divID').offset().top;
$('html, body').animate({scrollTop: targetOffset}, 1000);
person Irshad Khan    schedule 10.10.2017

Анимации:

// slide to top of the page
$('.up').click(function () {
    $("html, body").animate({
        scrollTop: 0
    }, 600);
    return false;
});

// slide page to anchor
$('.menutop b').click(function(){
    //event.preventDefault();
    $('html, body').animate({
        scrollTop: $( $(this).attr('href') ).offset().top
    }, 600);
    return false;
});

// Scroll to class, div
$("#button").click(function() {
    $('html, body').animate({
        scrollTop: $("#target-element").offset().top
    }, 1000);
});

// div background animate
$(window).scroll(function () {

    var x = $(this).scrollTop();

    // freezze div background
    $('.banner0').css('background-position', '0px ' + x +'px');

    // from left to right
    $('.banner0').css('background-position', x+'px ' +'0px');

    // from right to left
    $('.banner0').css('background-position', -x+'px ' +'0px');

    // from bottom to top
    $('#skills').css('background-position', '0px ' + -x + 'px');

    // move background from top to bottom
    $('.skills1').css('background-position', '0% ' + parseInt(-x / 1) + 'px' + ', 0% ' + parseInt(-x / 1) + 'px, center top');

    // Show hide mtop menu  
    if ( x > 100 ) {
    $( ".menu" ).addClass( 'menushow' );
    $( ".menu" ).fadeIn("slow");
    $( ".menu" ).animate({opacity: 0.75}, 500);
    } else {
    $( ".menu" ).removeClass( 'menushow' );
    $( ".menu" ).animate({opacity: 1}, 500);
    }

});

// progres bar animation simple
$('.bar1').each(function(i) {
  var width = $(this).data('width');  
  $(this).animate({'width' : width + '%' }, 900, function(){
    // Animation complete
  });  
});
person Community    schedule 27.02.2017

В большинстве случаев лучше использовать плагин. Шутки в сторону. Я собираюсь рекламировать мою здесь. Конечно, есть и другие. Но, пожалуйста, проверьте, действительно ли они избегают ловушек, для решения которых вам нужен плагин в первую очередь - не все из них.

Я написал о причинах использования плагина в другом месте. Вкратце, один вкладыш, лежащий в основе большинства ответов здесь

$('html, body').animate( { scrollTop: $target.offset().top }, duration );

плохой UX.

  • Анимация не реагирует на действия пользователя. Он продолжается, даже если пользователь щелкает, нажимает или пытается прокрутить.

  • Если начальная точка анимации близка к целевому элементу, анимация будет мучительно медленной.

  • Если целевой элемент расположен в нижней части страницы, его нельзя прокрутить до верхней части окна. Затем анимация прокрутки резко останавливается в середине движения.

Для решения этих проблем (и множество других), вы можете использовать мой плагин jQuery.scrollable < / а>. Затем звонок становится

$( window ).scrollTo( targetPosition );

вот и все. Конечно, есть дополнительные параметры .

Что касается целевой позиции, $target.offset().top выполняет свою работу в большинстве случаев. Но имейте в виду, что возвращаемое значение не учитывает границу элемента html (см. эту демонстрацию). Если вам нужно, чтобы позиция цели была точной при любых обстоятельствах, лучше использовать

targetPosition = $( window ).scrollTop() + $target[0].getBoundingClientRect().top;

Это работает, даже если установлена ​​граница на элементе html.

person hashchange    schedule 17.08.2015

После того, как я нашел способ заставить мой код работать, я думаю, что должен немного прояснить ситуацию: Для использования:

$('html, body').animate({
   scrollTop: $("#div1").offset().top
}, 2000);

вам нужно быть наверху страницы, поскольку $("#div1").offset().top будет возвращать разные числа для разных позиций, к которым вы прокручиваете. Если вы уже прокрутили верхнюю часть страницы, вам необходимо указать точное значение pageY (см. Определение pageY здесь: https://javascript.info/coordinates).

Итак, теперь проблема состоит в том, чтобы вычислить значение pageY одного элемента. Ниже приведен пример в случае, если контейнер прокрутки является телом:

function getPageY(id) {
    let elem = document.getElementById(id);
    let box = elem.getBoundingClientRect();
    var body = document.getElementsByTagName("BODY")[0];
    return box.top + body.scrollTop; // for window scroll: box.top + window.scrollY;
}

Вышеупомянутая функция возвращает то же число, даже если вы куда-то прокручивали. Теперь, чтобы вернуться к этому элементу:

$("html, body").animate({ scrollTop: getPageY('div1') }, "slow");
person Vu Viet Hung    schedule 26.08.2020

Это мой подход к абстрагированию идентификаторов и href с использованием универсального селектора классов.

$(function() {
  // Generic selector to be used anywhere
  $(".js-scroll-to").click(function(e) {

    // Get the href dynamically
    var destination = $(this).attr('href');

    // Prevent href=“#” link from changing the URL hash (optional)
    e.preventDefault();

    // Animate scroll to destination
    $('html, body').animate({
      scrollTop: $(destination).offset().top
    }, 500);
  });
});
<!-- example of a fixed nav menu -->
<ul class="nav">
  <li>
    <a href="#section-1" class="nav-item js-scroll-to">Item 1</a>
  </li>
  <li>
    <a href="#section-2" class="nav-item js-scroll-to">Item 2</a>
  </li>
  <li>
    <a href="#section-3" class="nav-item js-scroll-to">Item 3</a>
  </li>
</ul>

person vascogaspar    schedule 21.06.2015

Очень простой и легкий в использовании настраиваемый плагин jQuery. Просто добавьте атрибут scroll= к своему интерактивному элементу и установите его значение для селектора, к которому вы хотите перейти.

Вот так: <a scroll="#product">Click me</a>. Его можно использовать на любом элементе.

(function($){
    $.fn.animateScroll = function(){
        console.log($('[scroll]'));
        $('[scroll]').click(function(){
            selector = $($(this).attr('scroll'));
            console.log(selector);
            console.log(selector.offset().top);
            $('html body').animate(
                {scrollTop: (selector.offset().top)}, //- $(window).scrollTop()
                1000
            );
        });
    }
})(jQuery);

// RUN
jQuery(document).ready(function($) {
    $().animateScroll();
});

// IN HTML EXAMPLE
// RUN ONCLICK ON OBJECT WITH ATTRIBUTE SCROLL=".SELECTOR"
// <a scroll="#product">Click To Scroll</a>
person DevWL    schedule 11.01.2016

$('html, body').animate(...) не подходит для iphone, браузера Chrome Chrome Safari для Android.

Мне пришлось настроить таргетинг на корневой элемент содержимого страницы.

$ ('# cotnent'). animate (...)

Вот что у меня получилось

if (navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {           
    $('#content').animate({
    scrollTop: $("#elementtoScrollToID").offset().top
   }, 'slow');
}
else{
    $('html, body').animate({
    scrollTop: $("#elementtoScrollToID").offset().top
    }, 'slow');
}

Все содержимое тела связано с div #content

<html>
....
<body>
<div id="content">
....
</div>
</body>
</html>
person Shahdat    schedule 04.01.2017
comment
Вам действительно не следует использовать сниффинг пользовательского агента. webaim.org/blog/user-agent-string-history - person Alex Podworny; 11.02.2017
comment
Добавьте разрыв слова: break-all; к вашему элементу CSS, с которым возникла проблема. Веб-просмотр Android / iOS jQuery.animate ({scrollTop: y}) позиция Неверно. medium.com /@ellery.leung/ - person daliaessam; 07.04.2019

Это ответ Атхарвы от: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView. Просто хотел добавить, если ваш документ находится в iframe, вы можете выбрать элемент в родительском фрейме для прокрутки в представление:

 $('#element-in-parent-frame', window.parent.document).get(0).scrollIntoView();
person cynya    schedule 22.09.2018

Я написал функцию общего назначения, которая выполняет прокрутку до объекта jQuery, селектора CSS или числового значения.

Пример использования:

// scroll to "#target-element":
$.scrollTo("#target-element");

// scroll to 80 pixels above first element with class ".invalid":
$.scrollTo(".invalid", -80);

// scroll a container with id "#my-container" to 300 pixels from its top:
$.scrollTo(300, 0, "slow", "#my-container");

Код функции:

/**
* Scrolls the container to the target position minus the offset
*
* @param target    - the destination to scroll to, can be a jQuery object
*                    jQuery selector, or numeric position
* @param offset    - the offset in pixels from the target position, e.g.
*                    pass -80 to scroll to 80 pixels above the target
* @param speed     - the scroll speed in milliseconds, or one of the
*                    strings "fast" or "slow". default: 500
* @param container - a jQuery object or selector for the container to
*                    be scrolled. default: "html, body"
*/
jQuery.scrollTo = function (target, offset, speed, container) {

    if (isNaN(target)) {

        if (!(target instanceof jQuery))
            target = $(target);

        target = parseInt(target.offset().top);
    }

    container = container || "html, body";
    if (!(container instanceof jQuery))
        container = $(container);

    speed = speed || 500;
    offset = offset || 0;

    container.animate({
        scrollTop: target + offset
    }, speed);
};
person isapir    schedule 18.11.2015

Когда пользователь щелкает этот ввод с помощью #subject, страница должна прокручиваться до последнего элемента страницы с красивой анимацией. Это должно быть прокрутка вниз, а не вверх.

Последний элемент страницы - это кнопка отправки с #submit

$('#subject').click(function()
{
    $('#submit').focus();
    $('#subject').focus();
});

Сначала выполняется прокрутка вниз до #submit, а затем курсор возвращается к введенному значению, которое имитирует прокрутку вниз и работает в большинстве браузеров. Он также не требует jQuery, так как может быть написан на чистом JavaScript.

Может ли этот способ использования focus функции лучше имитировать анимацию посредством объединения focus вызовов. Я не проверял эту теорию, но она будет выглядеть примерно так:

<style>
  #F > *
  {
    width: 100%;
  }
</style>

<form id="F" >
  <div id="child_1"> .. </div>
  <div id="child_2"> .. </div>
  ..
  <div id="child_K"> .. </div>
</form>

<script>
  $('#child_N').click(function()
  {
    $('#child_N').focus();
    $('#child_N+1').focus();
    ..
    $('#child_K').focus();

    $('#child_N').focus();
  });
</script>
person Khaled.K    schedule 28.11.2015

Я установил модуль scroll-element npm install scroll-element. Это работает так:

import { scrollToElement, scrollWindowToElement } from 'scroll-element'

/* scroll the window to your target element, duration and offset optional */
let targetElement = document.getElementById('my-item')
scrollWindowToElement(targetElement)

/* scroll the overflow container element to your target element, duration and offset optional */
let containerElement = document.getElementById('my-container')
let targetElement = document.getElementById('my-item')
scrollToElement(containerElement, targetElement)

Написано с помощью следующих сообщений SO:

Вот код:

export const scrollToElement = function(containerElement, targetElement, duration, offset) {
  if (duration == null) { duration = 1000 }
  if (offset == null) { offset = 0 }

  let targetOffsetTop = getElementOffset(targetElement).top
  let containerOffsetTop = getElementOffset(containerElement).top
  let scrollTarget = targetOffsetTop + ( containerElement.scrollTop - containerOffsetTop)
  scrollTarget += offset
  scroll(containerElement, scrollTarget, duration)
}

export const scrollWindowToElement = function(targetElement, duration, offset) {
  if (duration == null) { duration = 1000 }
  if (offset == null) { offset = 0 }

  let scrollTarget = getElementOffset(targetElement).top
  scrollTarget += offset
  scrollWindow(scrollTarget, duration)
}

function scroll(containerElement, scrollTarget, duration) {
  let scrollStep = scrollTarget / (duration / 15)
  let interval = setInterval(() => {
    if ( containerElement.scrollTop < scrollTarget ) {
      containerElement.scrollTop += scrollStep
    } else {
      clearInterval(interval)
    }
  },15)
}

function scrollWindow(scrollTarget, duration) {
  let scrollStep = scrollTarget / (duration / 15)
  let interval = setInterval(() => {
    if ( window.scrollY < scrollTarget ) {
      window.scrollBy( 0, scrollStep )
    } else {
      clearInterval(interval)
    }
  },15)
}

function getElementOffset(element) {
  let de = document.documentElement
  let box = element.getBoundingClientRect()
  let top = box.top + window.pageYOffset - de.clientTop
  let left = box.left + window.pageXOffset - de.clientLeft
  return { top: top, left: left }
}
person svnm    schedule 23.11.2016

Обновленный ответ по состоянию на 2019 год:

$('body').animate({
    scrollTop: $('#subject').offset().top - $('body').offset().top + $('body').scrollTop()
}, 'fast');
person stardust4891    schedule 17.01.2019
comment
Вы должны использовать этот селектор для тела: [document.documentElement, document.body] И Смещение тела в уравнении не требуется. $ ('# subject'). offset (). top достаточно. - person ali6p; 19.11.2019

ОНЛАЙНЕР

subject.onclick = e=> window.scroll({ top: submit.offsetTop, behavior: 'smooth'});

subject.onclick = e=> window.scroll({top: submit.offsetTop, behavior: 'smooth'});
.box,.foot{display: flex;background:#fdf;padding:500px 0} .foot{padding:250px}
<input type="text" class="textfield" value="click here" id="subject" name="subject">

<div class="box">
  Some content
  <textarea></textarea>
</div>

<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">

<div class="foot">Some footer</div>

person Kamil Kiełczewski    schedule 08.01.2020

Чтобы показать элемент полностью (если это возможно с текущим размером окна):

var element       = $("#some_element");
var elementHeight = element.height();
var windowHeight  = $(window).height();

var offset = Math.min(elementHeight, windowHeight) + element.offset().top;
$('html, body').animate({ scrollTop: offset }, 500);
person Roman Shamritskiy    schedule 25.03.2014

Как бы то ни было, вот как мне удалось добиться такого поведения для общего элемента, который может находиться внутри DIV с прокруткой. В нашем случае мы прокручиваем не все тело, а только отдельные элементы с помощью overflow: auto; в более крупном макете.

Он создает поддельный ввод высоты целевого элемента, а затем помещает на него фокус, а браузер позаботится обо всем остальном, независимо от того, насколько глубоко вы находитесь в прокручиваемой иерархии. Работает как шарм.

var $scrollTo = $('#someId'),
inputElem = $('<input type="text"></input>');

$scrollTo.prepend(inputElem);
inputElem.css({
  position: 'absolute',
  width: '1px',
  height: $scrollTo.height()
});
inputElem.focus();
inputElem.remove();
person martinh_kentico    schedule 26.02.2016

Это сработало для меня:

var targetOffset = $('#elementToScrollTo').offset().top;
$('#DivParent').animate({scrollTop: targetOffset}, 2500);
person Polaris    schedule 07.11.2018

Вам просто необходимо:

$("selector").get(0).scrollTo(0, 0)
person Jaber Alshami    schedule 13.08.2020
comment
И вы можете использовать его с параметрами для сглаживания прокрутки с помощью чего-то вроде element.scrollTo ({top: 100, left: 100, behavior: 'smooth'}); См. developer.mozilla.org/en-US/docs/Web. / API / Element / scrollTo - person Julien Jacobs; 13.08.2020
comment
Пожалуйста, добавьте пояснение к своему ответу, чтобы другие могли извлечь из него уроки. - person Nico Haase; 13.08.2020
comment
Это просто. Внутри каждого объекта jQuery есть простой элемент javascrip. Вы можете получить к нему доступ через метод .get (api.jquery.com/get/#get-index) или просто вызвав [0]: $ (selector) .get (0) of $ (selector) [0]. Вы получите элемент JS, как если бы вы получили его через document.getElementById (selector_id). Таким образом, вы можете вызвать любую функцию JS, например scrollTo или scrollIntoView. - person Andrey Artemyev; 12.10.2020

person    schedule
comment
Чтобы сделать его более универсальным и убрать ненужное размещение хэштега в окне ссылки браузера, я просто изменил код, как показано ниже: jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); }); - person bubencode; 12.08.2018