Arhn - архитектура программирования

Как использовать тег привязки для прокрутки внутри div без автоматической прокрутки всей страницы?

Я хотел бы использовать теги привязки для прокрутки внутри div на веб-странице. Однако, когда я нажимаю на тег привязки, вся страница переходит к тегу привязки внутри div.

Содержимое внутри div должно прокручиваться без автопрокрутки тела веб-страницы.

Я искал в Google и пытался понять это в течение нескольких недель, но пока не нашел приемлемого решения. Кажется, это тоже действительно часто задаваемый вопрос.

Я очень мало знаю о javascript, но из того, что я понял, кажется, есть два возможных способа сделать это:

1. Чтобы тело страницы можно было прокручивать только колесиком мыши / вручную, а не с помощью якорных тегов. Это применимо только к телу, а не к другим элементам.

-or-

2. Чтобы перейти к тегу привязки в div и отменить процесс до того, как он повлияет на тело.

Бонусом было бы, если бы он не добавлял тег привязки к URL-адресу.

Вот несколько дополнительных ссылок на похожие вопросы, могут быть идеи, с которыми вы могли бы работать: кажется многообещающим, не удалось заставить его работать Прокрутка внутри div без перемещения страницы

использует event.preventDetfault () или event.returnValue = false, может работать для тела после прокрутки ссылки привязки вправо http://js-unit-testing.com/2013/08/08/preventing-anchor-clicking-from-scrolling-to-the-top/

другие идеи для решения подобных проблем Как предотвратить прокрутку страницы при прокрутке элемент DIV?

Как перейти к тегу привязки в прокручиваемом div, не заставив весь браузер спрыгнуть вниз?

Как отличить руководство прокрутка (с помощью колеса мыши / полосы прокрутки) из прокрутки Javascript / jQuery?

другие подходы к аналогичному вопросу Ссылка привязки HTML без прокрутки или перехода

Вот образцы HTML и CSS с соответствующими элементами. Вы можете изменить размер окна браузера, чтобы на главной странице была полоса прокрутки, чтобы увидеть нежелательный эффект автопрокрутки:

<html>
<body>
<div id="main">
<div id="mainwide">
<div id="left">
<a href="#2">2</a>
</div>
<div id="right">
<a id="link" name="2">2</a>
</div>
</div>
</div>
</body>
</html>

Вот CSS

html {
background-color: LightGreen;
}
#main {
border: 1px solid black;
margin-top: 200px;
width: 500px;
height: 300px;
overflow: hidden;
}
#mainwide {
width: 1000px;
height: 300px;
}
#left {
background-color: MediumSpringGreen;
width: 500px;
height: 300px;
float: left;
display: inline;
}
#right {
background-color: MediumSeaGreen;
width: 500px;
height: 300px;
float: left;
display: inline;
}
a#link {
float: right;
margin: 0;
padding: 0;
}

Может быть, вы сможете получить баллы за окончательный ответ на этот часто задаваемый вопрос?


Ответы:


1

Вы можете использовать функцию scrollTop из Jquery, чтобы расположить прокручиваемый div именно так, как вы хотите.

$( "#viv_button" ).click(function() {
    var container = document.getElementById('col2'); 
    var scrollTo = document.getElementById('viv');
    container.scrollTop = scrollTo.offsetTop;
});

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

03.07.2015
  • Интересный. Подойдет ли этот ScrollTop для примера html? Это два блока div, расположенных рядом друг с другом, и содержащий их div, а затем оконный div, который показывает только один из расположенных бок о бок div за раз. Когда щелкают ссылку в левом div, она прокручивается до привязки в правом div. Единственная проблема заключается в том, что главное окно также перескакивает на якорь, прокручивается только то, что находится в div, иначе тело может быть заблокировано. Можно ли сделать это только с помощью JavaScript? 03.07.2015
  • Он должен работать с прямым javascript, если вы не используете якоря. Похоже, что в источнике JQuery используется метод Javascript scrollTo. 06.07.2015
  • У меня есть аналогичная нерешенная проблема, но я не уверен, следует ли мне открыть новый вопрос или попытаться решить его с помощью этого вопроса. Мысли перед тем, как продолжить? 22.07.2019
  • почему всегда jQuery отвечает на вопрос, отличный от jQuey? Те должны быть запрещены. 14.03.2020
  • @TheFool честно согласился, но это ответ 2015 года, когда JQuery и веб-разработка были синонимами. 06.07.2021

  • 2

    Я обнаружил, что это произошло, потому что существует родительский элемент элемента, внутри которого находится ваш href = '# id_of_element'.

    Чтобы исправить это....

    // javascript
    document.body.position = 'absolute';
    
    // or css
    .body {
        position: absolute; 
    }
    

    Вы можете использовать фиксированный или относительный. Но это останавливает прокрутку тела (главной страницы) при выборе href где-нибудь внутри дочернего элемента.

    23.08.2015
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..