Ответ 1
window.location.hash = '#tries';
Это приведет к прокрутке к рассматриваемому элементу, по существу, "сосредоточив" его.
Можно ли сосредоточиться на <div>
с помощью функции JavaScript focus()
?
У меня есть тег <div>
<div id="tries">You have 3 tries left</div>
Я пытаюсь сосредоточиться на приведенном выше <div>
, используя:
document.getElementById('tries').focus();
Но это не сработает. Может кто-нибудь что-то предложить....?
window.location.hash = '#tries';
Это приведет к прокрутке к рассматриваемому элементу, по существу, "сосредоточив" его.
Да - это возможно. Чтобы сделать это, вам нужно назначить tabindex...
<div tabindex="0">Hello World</div>
В tabindex из 0 будет помещен тег "в порядке естественного вклада страницы". Более высокое число даст ему определенный порядок приоритета, где 1 будет первым, 2 секундой и т.д.
Вы также можете указать tabindex из -1, что сделает div только фокус-способным script, а не пользователем.
document.getElementById('test').onclick = function () {
document.getElementById('scripted').focus();
};
div:focus {
background-color: Aqua;
}
<div>Element X (not focusable)</div>
<div tabindex="0">Element Y (user or script focusable)</div>
<div tabindex="-1" id="scripted">Element Z (script-only focusable)</div>
<div id="test">Set Focus To Element Z</div>
document.getElementById('tries').scrollIntoView()
работает. Это работает лучше, чем window.location.hash
, когда вы фиксировали позиционирование.
Вы можете использовать tabindex
<div tabindex="-1" id="tries"></div>
Значение tabindex может привести к интересному поведению.
<div id="inner" tabindex="0">
this div can now have focus and receive keyboard events
</div>
Я хотел предложить что-то вроде Майкла Шиммина, но без hardcoding вещей, подобных элементу, или CSS, который применяется к нему.
Я использую jQuery для добавления/удаления класса, если вы не хотите использовать jquery, вам просто нужна замена для add/removeClass
- Javascript
function highlight(el, durationMs) {
el = $(el);
el.addClass('highlighted');
setTimeout(function() {
el.removeClass('highlighted')
}, durationMs || 1000);
}
highlight(document.getElementById('tries'));
- CSS
#tries {
border: 1px solid gray;
}
#tries.highlighted {
border: 3px solid red;
}
Чтобы сделать флеш границы, вы можете сделать это:
function focusTries() {
document.getElementById('tries').style.border = 'solid 1px #ff0000;'
setTimeout ( clearBorder(), 1000 );
}
function clearBorder() {
document.getElementById('tries').style.border = '';
}
Это сделает границу сплошной красной в течение 1 секунды, а затем удалит ее снова.
Попробуйте это -
$("html, body").stop().animate({ scrollTop: $("#inner").offset().top - 80 }, 1500, "easeInOutExpo"), e.preventDefault();