Как прокручивать страницу вниз при закрытом окне ввода?
Посмотрите эту страницу.
У меня есть страница с более низким "плавающей" фиксированной позицией div, которая покрывает некоторую часть нижней части экрана экрана, с высоким индексом z и множеством полей ввода.
Проблема заключается в том, что когда одно из нижних полей ввода сфокусировано, нажимая TAB, их содержимое частично скрывается div. Я хотел бы определить, когда сфокусированы нижние поля ввода, и прокрутите страницу вниз "достаточно", чтобы довести их до видимого места.
Есть ли чистый способ сделать это?
Изменить: мое решение работает, за исключением масштабирования браузера. Попробуйте его, например, на 144%. Любые идеи о том, как исправить?
Ответы
Ответ 1
Вот решение моего друга.
Кажется, хорошо работает в браузерах.
Все еще есть одно незначительное раздражение, что элемент имеет большую границу при выборе, а часть этого увеличенного края остается скрытой. Я всегда мог добавить лишний пиксель или два в свиток, но я уверен, что должно быть более элегантное решение.
Ответ 2
Решение Ripper234 хорошо работало для меня. Следующее решение для тех, чье поле покрывается элементом выше него (например, фиксированным навигатором), а не ниже него.
Я также анимировал его с помощью jQuery и добавил переменную дополнений, которая полезна, если у вас есть метка над полем, которое вы хотите показать, или хотите центрировать поле (просто установите отступ на половину высоты экрана).
var navHeight = 200;
var padding = 25;
$('input').on('focus', function() {
try {
var elemTop = $(this).offset().top;
var maxVisible = $(document).scrollTop() + navHeight;
if (elemTop < maxVisible) {
$("html, body").animate({ scrollTop: elemTop - navHeight - padding }, 250);
}
} catch (e) {
console.log("Error: " + e);
}
});
Ответ 3
Что делать, если вы добавляете обработчик onfocus в каждое текстовое поле и проверяете, слишком ли оно расположено или находится близко к элементу "снизу", и когда вы соответствующим образом меняете положение этого элемента div (переместите его вниз/вверх).
Ответ 4
Я бы просто использовал Z-index, чтобы поместить сфокусированный вход над фиксированным div
Я не думаю, что есть общий способ переноса экрана вниз, возможно, я ошибаюсь.
возможно, вы можете сделать это с в странице ссылок, как это, поскольку они предназначены, чтобы вытащить экран вниз, использовать JQuery, чтобы сказать "когда этот вход находится в фокусе перейти к соответствующей точке привязки"
<a href="#box5"><input type="text" /></a>
Ответ 5
element.scrollIntoView();
поддерживается во всех браузерах мэров, т.е. -6-7-8-9-10 firefox, webkit
или
element.focus(); element.blur();