Показать сообщение отдельно
  #1 (permalink)  
Старый 06.12.2017, 21:51
Кандидат Javascript-наук
Отправить личное сообщение для zlodiak Посмотреть профиль Найти все сообщения от zlodiak
 
Регистрация: 24.02.2012
Сообщений: 104

Игра для детей
пробую работать в библиотекой rxjs и вот набросал простейшую игру. в ней нужно выбирать кубики с номерами в порядке возрастания.

скажите оправдано ли здесь применение библиотеки rxjs? мне кажется, если приложение разрастётся, то удобнее работать с потоками событий чем с eventListener-ми.

Можно ли упростить этот код(но не отказываясь от RX)?

и если не трудно, скажите, хорошо ли скомпонован код, читать такое удобно? как можно улучшить читабельность?

jsfiddle

js:
document.addEventListener("DOMContentLoaded", ready);

let currNum;
let step;
let startContent = 'Это простейший тренажёр для детей, он проверяет способность считать. Предполагается, что: \
<br>дети от 1 до 3 лет должны уметь считать до 5 \
<br>дети от 4 до 5 лет должны уметь считать до 10 \
<br>дети от 6 до 7 лет должны уметь считать до 30 \
<br>дети от 7 до 9 лет должны уметь считать до 100 \
	<br><br>Чтобы проверить знания участнику предлагается последовательно в порядке возрастания выбрать кубики с цифрами \
';

function init() {
	currNum = -1;
	step = 0
	let startBtn = document.getElementById('start');
	startBtn.click();
};

function clearContent() {
	let contentInner = document.getElementById('contentInner');
	contentInner.innerHTML = '';
};

function deletePoint(id) {
	let pointEl = document.getElementById(id);
	pointEl.parentNode.removeChild(pointEl);
};

function createPoints(count) {
	let contentInner = document.getElementById('contentInner');

	for(let i = 0; i <= 2; i++) {
		let num_ = Math.random() * count;
		let num = Math.ceil(num_);

		let pointEl = document.createElement('div');
		pointEl.className = 'point';
		pointEl.id = 'point_' + i;
		pointEl.setAttribute('data-num', num);
		pointEl.innerHTML = num;		

		contentInner.appendChild(pointEl);
	};
};


function ready() {
	let ulEl = document.getElementById('ul');
	let contentInnerEl = document.getElementById('contentInner');

	let menu = Rx.Observable.fromEvent(ulEl, 'click');
	let contentInner = Rx.Observable.fromEvent(contentInnerEl, 'click');

	let subscription = menu
	.map(e => e.target)
	.filter(t => t.className === 'start' || t.className === 'li')
	.subscribe(function (t) {
		clearContent();
    switch (t.className) {
      case 'start':
				document.getElementById('contentInner').innerHTML = startContent;
        break;
      case 'li':				
				createPoints(t.getAttribute('data-count'));
        break;
    }
	});

	let subscription3 = contentInner
	.map(e => e.target)
	.filter(t => t.className === 'point')
	.subscribe(function (t) {
		let val = +document.getElementById(t.id).innerHTML;

		++step;
		deletePoint(t.id);

		if(currNum > val) { 
			alert('Not correct'); 
			init();
		} else {
			currNum = val;
			if(step > 2) { 
				alert('Correct'); 
				init();
			}
		}	
	});									
	
	init();
};

Последний раз редактировалось zlodiak, 06.12.2017 в 21:54.
Ответить с цитированием