 
			
				21.01.2018, 18:56
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.01.2017 
					
					
					
						Сообщений: 35
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Но у вас здесь даже если открыл совпадающую пару, то числа исчезают все равно 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 19:04
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.01.2017 
					
					
					
						Сообщений: 35
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Хотя все норм, спасибо__)) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 19:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.01.2017 
					
					
					
						Сообщений: 35
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 А почему удаляется класс ок только у первого элемента массива, а второй не трогается? 
 
 ar[0].classList.remove("ok"); 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 20:20
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Георгий777, 
 потому что второй это тот который нажали сейчас,  и у него класс удалится  через таймер, если в течении секунды не будет найдена пара 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 20:27
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Георгий777, 
 пост №10, добавлено условие для установки таймера, строка 80 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 20:45
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				игра открыть пару
			 
			
		
		
		
		Георгий777, 
 убрал массив ... достаточно одной переменной, плюс индикация окончания игры.
 
<!DOCTYPE html>
<html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
        <title>Grid</title>
        <style type="text/css">
.output {
  display:flex;
  flex-wrap: wrap;
  justify-content: center;
  width: 603px;
  margin: 50px auto;
}
.inner {
  display: flex;
  flex-basis: 150px;
  height: 80px;
  background-color: #ccc;
  border: 1px solid gray;
  text-align: center;
  line-height: 80px;
  transition: 1s;
}
.inner:hover {
  cursor: pointer;
}
.inner span {
  font-size: 48px;
  opacity: 0;
  width: 100%;
  height: 100%;
  transition: 1s;
}
.inner.ok span {
  transition: .4s;
  opacity: 1;
}
.output.end .inner{
  background-color: #0000CD;
  color: #FFFFFF;
}
        </style>
    </head>
    <body>
        <div class="output">
      <div class="inner"><span>1</span></div>
      <div class="inner"><span>3</span></div>
      <div class="inner"><span>9</span></div>
      <div class="inner"><span>5</span></div>
      <div class="inner"><span>4</span></div>
      <div class="inner"><span>1</span></div>
      <div class="inner"><span>3</span></div>
      <div class="inner"><span>8</span></div>
      <div class="inner"><span>9</span></div>
      <div class="inner"><span>5</span></div>
      <div class="inner"><span>4</span></div>
      <div class="inner"><span>8</span></div>
    </div>
<script>
var elem, timer, duration = 1000, div = document.querySelectorAll(".inner"), len = div.length/2;
[].forEach.call(div, function(item) {
  item.addEventListener("click", function() {
    if (item.classList.contains("ok")) {
      return;
    }
    window.clearTimeout(timer);
    item.classList.add("ok");
    if (elem) {
      if (elem.textContent == item.textContent) {
        elem = null;
        --len || document.querySelector(".output").classList.add("end");
      } else {
        elem.classList.remove("ok");
        elem = item;
      }
    }
   else elem = item;
   if(elem) timer = window.setTimeout(function() {
     elem.classList.remove("ok");
     elem = null;
    }, duration);
  });
});
</script>
    </body>
</html>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 18.05.2019 в 18:58.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 23:02
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.01.2017 
					
					
					
						Сообщений: 35
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Не совсем понял строчки ниже 
 
  if (elem) { 
      
      if (elem.textContent == item.textContent) { 
        elem = null; 
        --len || document.querySelector(".output").classList.add("e  nd"); 
 
      } else { 
        elem.classList.remove("ok"); 
        elem = item; 
      } 
    } 
   else elem = item; 
 
Если текст первой кликнутой ячейки равен тексту второй, то первую удаляем и почему то заканчиваем игру, судя по добавлению класса .end 
,иначе почему то в первую записываем вторую 
 
Вы уж простите за столько вопросов) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.01.2018, 23:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Георгий777, 
Если текст первой кликнутой ячейки равен тексту второй то больше не надо хранить то что нажали в прошлый клик. 
уменьшаем счётчик на 1 , если закончился счётчик добавляем класс "конец игре"  
 если  ячейки не равны убираем прошлый выбор, сохраняем новый 
если с прошлого раза ничего не сохранено, то сохраняем текущий выбор 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.01.2018, 12:04
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.01.2017 
					
					
					
						Сообщений: 35
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		https://jsfiddle.net/qcjmt4rk/5/
Здравствуйте, подскажите , пожалуйста , почему в данном коде, не срабатывает управление обьектом через стрелки клавиатуры - может переменная direction не видна в функции move? 
Пробовал обернуть все в window.onload = function() {}-  но вообще все слетело  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.01.2018, 13:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Георгий777,
 
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
#output {
  width:400px;
  height:400px;
  border-top: 1px solid gray;
  border-left: 1px solid gray;
}
.inner {
  border-bottom: 1px solid gray;
  border-right: 1px solid gray;
  width:19px;
  height:19px;
  float: left;
}
  </style>
</head>
<body>
<div id="output"></div>
<script>
     "use strict"
let fields = 20 * 20, i, div, x = 0, direction = 'right', ar = [];
function createMatrix() {
  let output = document.getElementById('output');
  for(i = 0; i < fields; i+=1) {
    div =  document.createElement('div');
    div.className = 'inner';
    output.appendChild(div);
  }
}
createMatrix();
function setCell(num, val) {
  let output = document.getElementById('output');
  let cell = output.children[num];
  if(val)
  	cell.style.backgroundColor = 'red';
  else
  	cell.style.backgroundColor = 'transparent';
}
//setCell(0, true);
function move() {
  setCell(x, false);
  switch (direction) {
  	case 'right': x++; break;
    case 'left': x--; break;
    case 'up': x -= 20; break;
    case 'down': x += 20; break;
  }
  if(x < 0) x = 0;
  if(x >= fields) x =  fields - 1;
  setCell(x, true);
}
setInterval(move,1000);
document.onkeydown = function(e) {
  switch (e.keyCode) {
  	case 37: direction = 'left';break;
    case 38: direction = 'up';break;
    case 39: direction = 'right';break;
    case 40: direction = 'down';break;
  }
}
  </script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |