Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Перемещение по списку с помощью стрелок (https://javascript.ru/forum/dom-window/34951-peremeshhenie-po-spisku-s-pomoshhyu-strelok.html)

Research 25.01.2013 18:26

Перемещение по списку с помощью стрелок
 
Здравствуйте!
В общем, задача такова:
есть список подгужаемый с помощью ajax
<ul>
<li>
<p>El1</p>
</li>
<li>
<p>El2</p>
</li>
<li>
<p>El3</p>
</li>
</ul>- примерно такой список.
Так вот, нужно сделать так, чтобы по элементам списка можно было передвигаться с помощью стрелок на клавиатуре.
Пожалуйста, дайте какое-нибудь простенькое решение. Спасибо всем =)

animhotep 25.01.2013 19:26

что означает передвигаться? при нажатии стрелок должен текст подсвечиваться или как вы это себе представляете

Research 25.01.2013 19:51

Цитата:

Сообщение от animhotep (Сообщение 229427)
что означает передвигаться? при нажатии стрелок должен текст подсвечиваться или как вы это себе представляете

да, чтобы пункт списка на котором сейчас сфокусирован пользователь, выделялся. пример вы модете посмотреть введя какое-нибудь слово в поисковое поле google. там подгрузится блок с похожих ссылок. так вот по ним можно передвигаться с помощью стрелок вверх и вниз и выбирать нажав enter. вот мне нужно так же сделать. Можете помочь?

danik.js 26.01.2013 00:48

Может это поможет (сорри за говнокодерство):
<ul id="list" style="display: none" tabindex="-1"> 
    <li> 
        <p>El1</p> 
    </li> 
    <li> 
        <p>El2</p> 
    </li> 
    <li> 
        <p>El3</p> 
    </li> 
</ul>
<button>Show List</button>
<style>
    .active{
        outline: 1px solid red;
    }
</style>
<script>
(function(){
    var container = document.getElementById('list');
    var items = container.getElementsByTagName('li');
    var index = -1;
    function move(dir){
        !items[index] || (items[index].className = '');
        switch (dir)
        {
            case 'up':
                index = (index <= 0) ? items.length-1 : --index;
                break;
            case 'down':
                index = (index == items.length-1) ? 0 : ++index;
                break;
            default:
                throw Error('WTF?');
        }
        items[index].className = 'active';
    }
    function toggle(todo){
        container.style.display = (container.style.display == 'none') ? '' : 'none';
    }
    
    document.addEventListener('keydown', function(e) {
        var newIndex = null;
        switch (e.keyIdentifier)
        {
            case 'Up':
                e.preventDefault();
                move('up');
                break;
            case 'Down':
                e.preventDefault();
                move('down');
                break;
            case 'Enter':
                alert('Selected ' + (index+1));
                toggle();
                break;
        }
    });
    
    document.querySelector('button').onclick = function() { toggle(); container.focus(); }
})();
</script>


Нужно править на кроссбраузерность, сразу предупреждаю.

Research 26.01.2013 03:07

Спасибо большое. огромное спасибо!
проблему кроссбраузерности решил. но не знаю как в ie, даже боюсь там тестировать. но это не важно. в общем, спасибо =)


Часовой пояс GMT +3, время: 21:04.