ASCII-код 32 - это значение ASCII, которое представляет клавишу пробела, и ваш код по существу указывает браузеру, что он возвращает false при обнаружении этого ключевого кода. Поскольку false возвращается, эффект полосы прокрутки, о котором вы говорите, фактически успешно отключен.
Однако неудачный побочный эффект этой удобной функции прокрутки прокрутки пробела заключается в том, что он отключает нажатия клавиш пробела всюду на странице.
Вместо того, чтобы возвращать false, если обнаружен код ключа, передайте текущее значение scrollTop в закрытие, которое возвращает функцию в событие setTimeout. Когда срабатывает setTimeout, позиция scrollTop возвращается обратно к значению, в которое оно было, когда событие setTimeout было впервые зарегистрировано.
window.onkeydown = function(e) {
if(event.keyCode == 32) { // alert($(document).scrollTop());
setTimeout(
(function(scrollval) {
return function() {
$(document).scrollTop(scrollval);
};
})($(document).scrollTop()), 0);
}
};
Ваши пользователи могут удобно использовать spacebars во входных текстовых и прокручиваемым, и в то же время, нажав клавишу пробел, а не сосредоточены на текстовый элемент больше не будет приводить к скроллинга страницы.
Под капотом прокрутка все еще имеет место. Он просто сбрасывается со скоростью, достаточно быстрой, чтобы пользователь не заметил.
Если вы увеличите это значение до 100 или 1000, это даст вам лучшее представление о том, что происходит под капотом. Фактически вы увидите прокрутку страницы, а затем вернитесь к предыдущей позиции прокрутки.
Это было протестировано только в Chrome и Firefox 13! Таким образом, вам может потребоваться настроить продолжительность setTimeout - в настоящее время 0 - на другое значение в браузерах, таких как Internet Explorer. Будьте готовы к грациозному снижению - поддерживая эту функцию только в современных браузерах - при необходимости.
UPDATE:
Для справки, ниже метод использовать, чтобы сделать это совместимо с основными браузерами. Он был протестирован в Chrome, Firefox, IE8, IE9 и Safari.
Хотя он работает в IE8/IE9, он не очень плавный.
// put the eventhandler in a named function so it can be easily assigned
// to other events.
function noScrollEvent(e) {
e = e || window.event;
if(e.keyCode == 32) {
setTimeout(
(function(scrollval) {
return function() {
$(document).scrollTop(scrollval);
};
})($(document).scrollTop()), 0);
}
}
// Chrome and Firefox must use onkeydown
window.onkeydown = noScrollEvent;
// Internet Explorer 8 and 9 and Safari must use onkeypress
window.document.onkeypress = noScrollEvent;
«Я не уверен, если мой код плохо», «Я не слишком уверен, что именно он делает »--- как можно назвать« ваш »код, если вы его не пишете? – zerkms