У меня есть div, размер которого составляет всего 300 пикселей, и я хочу, чтобы, когда страница загружается, прокрутите страницу вниз. К этому div динамически добавляется контент, и его необходимо прокручивать до конца. Теперь, если пользователь решит прокрутить вверх, я не хочу, чтобы он прыгал вниз до тех пор, пока пользователь снова не прокрутит весь путь вниз.
Возможно ли иметь div, который будет прокручиваться вниз, если пользователь не прокручивает вверх, а когда пользователь прокручивает обратно вниз, ему нужно оставаться внизу, даже когда добавляется новый динамический контент. Как бы я пошел, создавая это.
{position : relative; bottom:0;}
. Удалите свойство css после прокрутки пользователем.Ответы:
Это может помочь вам:
[РЕДАКТИРОВАТЬ], чтобы соответствовать комментарию ...
при каждом добавлении контента вызывайте функцию updateScroll () или устанавливайте таймер:
если вы хотите обновить ТОЛЬКО если пользователь не двигался:
источник
setInterval
для этой легкой проблемы.Я смог заставить это работать только с CSS.
Хитрость заключается в использовании
display: flex;
иflex-direction: column-reverse;
Браузер рассматривает дно как его верх. Предполагая поддержку браузеров, на которые вы ориентируетесь
flex-box
, единственное предостережение заключается в том, что разметка должна быть в обратном порядке.Вот рабочий пример. https://codepen.io/jimbol/pen/YVJzBg
источник
overflow:auto; display:flex; flex-direction:column-reverse;
к внешней обертке вместо внутренней обертки.Я только что реализовал это, и, возможно, вы можете использовать мой подход.
Скажем, у нас есть следующий HTML:
Затем мы можем проверить, прокручивается ли она до конца с помощью:
scrollHeight дает вам высоту элемента, включая любую невидимую область из-за переполнения. clientHeight дает вам высоту CSS или, иначе говоря, фактическую высоту элемента. Оба метода возвращают высоту без
margin
, так что вам не нужно об этом беспокоиться. scrollTop дает вам положение вертикальной прокрутки. 0 - это верх, а max - это scrollHeight элемента за вычетом высоты самого элемента. При использовании полосы прокрутки может быть трудно (это было в Chrome для меня) получить полосу прокрутки полностью вниз до дна. поэтому я добавил неточность в 1 пиксель. ТакisScrolledToBottom
будет верно, даже если полоса прокрутки будет 1px снизу. Вы можете установить это так, как считаете нужным.Тогда это просто вопрос установки scrollTop элемента внизу.
Я сделал скрипку для вас, чтобы показать концепцию: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDIT: Добавлен фрагмент кода , чтобы выяснить , когда
isScrolledToBottom
этоtrue
.Прикрепить полосу прокрутки вниз
источник
if(!isScrolledToBottom)
: тест выглядит неправильно для меня (и не работал в моем коде, пока я его не исправил).out.scrollHeight - out.clientHeight <= out.scrollTop + 1
. Вы используете padding в своем CSS?document.getScrollingElement
как предложено здесь: stackoverflow.com/questions/36227559/scrolltop-always-returns-0/…Живая демоверсия: http://jsfiddle.net/KGfG2/
источник
источник
В 2020 году вы можете использовать css snap , но до Chrome 81 изменение макета не вызовет повторную привязку , в Chrome 81 работает чистый пользовательский интерфейс css chat , также вы можете проверить, могу ли я использовать CSS snap .
Эта демонстрация будет привязывать последний элемент, если он виден, прокрутите вниз, чтобы увидеть эффект.
источник
Run code snippet
чтобы увидеть эффект. (PS: еслиRun code snippet
не работает, попробуйте это: https://jsfiddle.net/Yeshen/xm2yLksu/3/ )Как это работает:
Переполнением по умолчанию является прокрутка сверху вниз.
transform: rotate(180deg)
Можно сделать прокрутку или загрузить динамический блок снизу вверх.https://blog.csdn.net/yeshennet/article/details/88880252
источник
Run code snippet
, непосредственно увидеть эффект.Это рассчитает ScrollTop Position из высоты
#yourDivID
использования$(document).height()
свойства, так что даже если динамическое содержимое добавлено в div, скроллер всегда будет в нижней позиции. Надеюсь это поможет. Но он также имеет небольшую ошибку, даже если мы прокручиваем вверх и оставляем указатель мыши на скроллере, он автоматически перейдет в нижнюю позицию. Если кто-то сможет это исправить, это тоже будет хорошо.источник
Вот моя версия, основанная на ответе dotnetCarpenter. Мой подход - чистый jQuery, и я назвал переменные, чтобы сделать вещи немного яснее. Что происходит, если высота содержимого больше, чем контейнер, который мы прокручиваем на дополнительное расстояние вниз для достижения желаемого результата.
Работает в IE и Chrome.
источник
Ответ Джима Холла предпочтительнее, потому что, хотя он и не прокручивается до самого дна при прокрутке вверх, это также чистый CSS.
Однако, к сожалению, это нестабильное решение: в chrome (возможно, из-за проблемы 1-px, описанной выше dotnetCarpenter),
scrollTop
ведет себя неточно на 1 пиксель, даже без взаимодействия с пользователем (при добавлении элемента). Вы можете установитьscrollTop = scrollHeight - clientHeight
, но это будет держать div в позиции, когда добавляется другой элемент, иначе функция «держать себя в нижней части» больше не работает.Короче говоря, добавление небольшого количества Javascript (вздоха) исправит это и выполнит все требования:
Что-то вроде https://codepen.io/anon/pen/pdrLEZ this (пример Coo), и после добавления элемента в список также следующее:
где 29 - высота одной строки.
Итак, когда пользователь прокручивает на половину строки вверх (если это вообще возможно?), Javascript игнорирует его и прокручивает до конца. Но я думаю, что это пренебрежимо мало. И это исправляет Chrome 1 px вещь.
источник
Вот решение, основанное на сообщении в блоге Райана Ханта . Это зависит от
overflow-anchor
свойства CSS, которое прикрепляет позицию прокрутки к элементу в нижней части прокручиваемого содержимого.Обратите внимание, что в
overflow-anchor
настоящее время не работает в Safari или Edge, поэтому это решение в настоящее время не работает во всех браузерах.источник
Вы можете использовать что-то вроде этого,
источник
Вот как я подошел к этому. Мой рост div составляет 650 пикселей. Я решил, что если высота прокрутки находится в пределах 150px от нижней части, то автоматически прокручиваю ее. Иначе, оставьте это для пользователя.
источник