2013-11-20 2 views
2

Я использую плагин jQuery под названием Waypoints для работы со свитком.jQuery - автоматический ввод фокуса при прокрутке по определенному элементу

То, что я хочу достичь, - это установка фокуса на первый элемент ввода раздела, который находится в окне просмотра, и перемещение фокуса на вход следующих соответствующих секций при прокрутке вниз. И при прокрутке назад к первому разделу выше, он должен установить фокус обратно на вход первого раздела.

Ниже приведено то, что у меня есть на моей реальной рабочей установке, использующей вышеупомянутый плагин. К сожалению, я не могу получить плагин в моем JS Fiddle.

Этот блок кода работает с точки зрения настройки фокуса на загрузку страницы и изменения фокусировки на целевой вход при прокрутке вниз , но прокрутка назад в верхнюю часть не возвращает фокус.

(function($) { 

var firstInput = $('section').find('input[type=text]').filter(':visible:first'); 

if (firstInput != null) { 
    firstInput.focus(); 
} 

$('section').waypoint(function() { 
    var getFocus = $(this).find('input[type=text]').filter(':visible:first'); 
    getFocus.focus(); 
}); 

$('section').waypoint(function() { 
    var getFocus = $(this).find('input[type=text]').filter(':visible:first'); 
    getFocus.focus(); 
}, { 
    offset: function() { 
     return -$(this).height(); 
    } 
}); 

}); 

Вот мой JS Fiddle , который не имеет плагин часть.

Пока кто-то может объяснить, как это сделать в обычном jQuery , если вы не знакомы с этим плагином.

+0

Просто добавьте плагин в качестве внешнего ресурса: http://jsfiddle.net/LX262/ – mplungjan

+0

@mplungjan Привет, это CDN для плагина? Я не знал, что CDN доступен для довольно не крупных плагинов. –

+0

Нет, это файл js с примера автора страницы – mplungjan

ответ

2

jQuery Waypoints очень проста в использовании. Я не пробовал с кодом, но я получил это сделать с этим:

$('input:first').focus(); 

$('section').waypoint(function() { 
    $(this).find('input:first').focus(); 
}); 

Пожалуйста, смотрите эту fiddle.

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


Если вы хотите сделать только эту простую задачу, я предлагаю вам отказаться от плагина. Я могу показать вам, как это сделать с помощью jQuery.

Вы можете обрабатывать прокрутку с помощью функции jQuery scroll(). Вам нужно получить scrollTop() на прокрутке, а затем сравнить его с <input>'s top offset().

$(window).scroll(function(){ 
    var st = $(this).scrollTop(); 
    $('input[type=text]').each(function(){ 
     var offset = $(this).offset(); 

     if(st >= offset.top -20 && st < offset.top + $(this).height()){ 
      $(this).focus(); 
     } 
    }); 
}); 

Вот fiddle.

+1

Да, у меня была такая же проблема с прыжками на скрипке. Теперь он отлично работает на моей рабочей установке. Единственной добавленной частью является использование 'direction' в функции цепной путевой точки, которой я дал разные значения смещения при прокрутке вверх и вниз. Без этого самая верхняя часть не попадет в цель при прокрутке назад. Я также дам обычный подход jquery попробовать. Спасибо за ваш тщательный вклад. –

Смежные вопросы