2016-02-11 2 views
1

Я пытаюсь создать функцию в javascript, которая продвигает некоторые фигуры (цветные ячейки в таблице) по каждой странице при каждом выпуске ключа. Я полный новичок, поэтому пока я просто пытаюсь понять, как переместить «активный» класс из одного тега <td> в другой при пользовательском подключении.Перемещение класса из одного тега в другой с помощью javascript

<table class="racer_table"> 
 
     <tr id="player1"> 
 
     <td class="active"></td> 
 
     <td></td> 
 
     <td></td> 
 
     <td></td> 
 
     </tr> 
 
     <tr id="player2"> 
 
     <td class="active"></td> 
 
     <td></td> 
 
     <td></td> 
 
     <td></td> 
 
     </tr> 
 
    </table>

+0

Добавить атрибут класса в новую ячейку; удалить его из старого - сделать в ответ на соответствующее ключевое событие. – user2864740

+0

Добавить Onkeyup изменить в функции или в выборе tr добавить прослушиватель событий – Vijay

+0

@Vijay спасибо, не могли бы вы показать мне пример выбора tr? –

ответ

2

У вас есть интересный вызов. Основываясь на HTML, я предполагаю, что вы хотите многопользовательскую игру. Я оставлю эту часть вам. Но вот как вы могли бы сделать это для одного игрока (тогда просто отслеживайте, кто активен, и вы можете адаптировать его к двум игрокам):

Используйте document.onkeyup, который, если функция назначена ему, будет называться каждый время, когда клавиша переходит в «вверх» (как при нажатии клавиши «k», она идет вниз, а затем вверх, чтобы прослушивание было полным нажатием). Когда функция вызывается, ей передается событие. Мы знаем, что стандарт говорит, что свойство, называемое keyCode, будет существовать в событии, которое является числовым значением. Мы можем использовать это, чтобы определить, какой ключ был нажат.

Так что у нас есть этот HTML:

<table class="racer_table"> 
    <tr> 
    <td class="active"></td> 
    <td></td> 
    <td></td> 
    <td></td> 
    </tr> 
</table> 

И мы стилизовать таким образом, мы можем видеть тд как квадраты цвета:

td { 
    width: 50px; 
    height: 50px; 
    background-color: blue; 
} 

td.active { 
    background-color: red; 
} 

Затем использовать этот JavaScript:

var UP = 38; 
var DOWN = 40; 
var LEFT = 37; 
var RIGHT = 39; 

var racerTable = document.getElementsByClassName('racer_table')[0]; 

document.onkeyup = function(e) { 
    switch (e.keyCode) { 
    case UP: 
    case LEFT: 
     var cells = racerTable.getElementsByTagName('td'); 
     for (var i=0; i < cells.length; i++) { 
     if (cells[i].className.indexOf('active') !== -1) { 
      if (i === 0) { 
      // do nothing, all the way left 
      } else { 
      cells[i].className = ''; 
      cells[i-1].className = 'active'; 
      break; 
      } 
     } 
     } 
     break; 

    case DOWN: 
    case RIGHT: 
     var cells = racerTable.getElementsByTagName('td'); 
     for (var i=0; i < cells.length; i++) { 
     if (cells[i].className.indexOf('active') !== -1) { 
      if (i === (cells.length - 1)) { 
      // do nothing, all the way right 
      } else { 
      cells[i].className = ''; 
      cells[i+1].className = 'active'; 
      break; 
      } 
     } 
     } 
     break; 
    } 
} 

JSFiddle: https://jsfiddle.net/5wuc0mre/ (обратите внимание, щелкните в правой нижней панели с синим и красным кружками, а затем используйте клавиши вверх/вниз или влево/вправо для перемещения красного квадрата)

+0

Большое спасибо @Cymen. Некоторые вопросы: 1. Почему вы делаете аргумент функции (e)? и 2. что означает (ячейки [i] .className.indexOf ('active')! == -1) означает? –

+0

@MaxineEllah Я использую 'e' из-за соглашения - яснее использовать' event'. Но я мог бы использовать 'theEvent' или' keyPressEvent' или что бы я ни хотел, поскольку я просто определяю первый аргумент функции, будет назначен тому, что я назову там. Но я должен был быть уверен, что я согласен с именем (поэтому, когда я проверил «.keyCode», мне пришлось бы использовать «theEvent.keyCode» или то, что я назвал его). Я отвечу о следующей части отдельно. – Cymen

+0

@MaxineEllah Итак, узел DOM имеет свойство 'className', которое является строкой. Для этого HTML 'hi' 'a.className при доступе к нему в качестве узла DOM будет' 'a b c" '. Так что я делаю проверку, если 'cells [i]' имеет класс 'active' или нет -' indexOf' возвращает '-', если аргумент отсутствует в строке. Современные браузеры имеют гораздо более приятное свойство classList, но, к сожалению, не все браузеры поддерживают его, поэтому вы можете использовать его, если это не имеет значения для вас (google «mdn classList»). – Cymen

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