Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Функция выдает что-то попало, помогите пожалуйста (https://javascript.ru/forum/events/30894-funkciya-vydaet-chto-popalo-pomogite-pozhalujjsta.html)

Jeremen 19.08.2012 17:14

Функция выдает что-то попало, помогите пожалуйста
 
Вот есть такая структура
<div id="card"></div>

И такой JS
function gameCore() {
			var card = document.getElementById('card');
			var position = {
				top: getRandom(document.documentElement.clientHeight) - 270,
				left: getRandom(document.documentElement.clientWidth) - 320
			};
			var colorsArr = ['yellow', 'orange', 'hotPink', 'red', 'green', 'black', 'deepSkyBlue', 'mediumBlue'];
			var color = colorsArr[Math.floor(Math.random() * colorsArr.length)];
			
			if (color === card.style.backgroundColor) {
				getColorWithoutReps(card.style.backgroundColor);
			}
			
			card.style.backgroundColor = color;
			
			if (position.top < 0) {
				position.top = 250;
			}
			
			if (position.left < 0) {
				position.left = 650;
			}
			
			card.style.top = position.top + 'px';
			card.style.left = position.left + 'px';
			
			function getColorWithoutReps(colorArg) {
				while (color === colorArg) {
					color = colorsArr[Math.floor(Math.random() * colorsArr.length)];
				} 
			}
			
			function getRandom(includingTo) {
			     return Math.floor(Math.random() * includingTo + 1);
			}
			
		}

По задумке есть карточка она прыгает по экрану и всё время меняет цвет, цвет не должен повторяться. Сделал такую функцию но почему-то цвет бывает повторяется. Никак не пойму как-такое может быть помогите пожалуйста...

cyber 19.08.2012 17:30

может потому что числа которые генерирует Math.random могу повторятся

cyber 19.08.2012 17:33

что бы не было повторении , можете перебирать массив по порядку (как в цикле) или записывать те номера элементов которые были (в массив) и проверять каждый раз

Jeremen 19.08.2012 17:33

всё разобрался. Не назначил интервал вызова функции и перегружаю страницу, а на ней то карточка то разная и скрипт другой. Дико затупил. Всё тему можно закрыть)

Jeremen 19.08.2012 18:55

Пока не закрыли тему чтобы не сорить хочу спросить можно ли сделать как то так что бы после setTimeout код выполнялся после конца setTimeout? например: такой код setTimeout(func, 10000); alert('text');
выведется алерт, а потом отработает функция через 10сек, а можно ли как то сделать что бы после отработки setTimout работал alert?

cyber 19.08.2012 19:01

Цитата:

Сообщение от Jeremen (Сообщение 198809)
Пока не закрыли тему чтобы не сорить хочу спросить можно ли сделать как то так что бы после setTimeout код выполнялся после конца setTimeout? например: такой код setTimeout(func, 10000); alert('text');
выведется алерт, а потом отработает функция через 10сек, а можно ли как то сделать что бы после отработки setTimout работал alert?

будет работать только тот код который в вызванной функции
если после окночания работы setTimeout , нужна задержка добаляйте еще setTimeout

Jeremen 19.08.2012 19:41

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

cyber 19.08.2012 20:10

Цитата:

Сообщение от Jeremen (Сообщение 198817)
а то другой вопрос, как можно узнать точное время окончания если там делается некоторое кол-во проходов? То есть сеттаймут использую как альтернативу сетинтервал, умножения времени интервала на кол-во проходов дает не совсем точный результат, попробовал сеттайаут с таким временем ожидания вылез чуть раньше...

а зачем вам время выполнения? если вы хотите запустить новый таймер после окончания предыдущего то можно сделать так:
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <div id='timer'></div>
    <script>

   var count = 5;   
   var innerTimer = document.getElementById('timer');
      


      function callAfterEnd_Fnc() {
      
      alert('таймер выполнился можно запускать новый')
      
      }     

     
     function callTimer () {
       
     innerTimer.innerHTML = count;  
     
       if (count == 0) {
       
       callAfterEnd_Fnc();
       return;
       
       }
     count--;  
     setTimeout(callTimer,1000)
     } 
    
      
    callTimer ();
    </script>

  </body>
</html>

Jeremen 19.08.2012 21:28

А что на счет когда беру table.innerHTML и в внутрь ложу цикл то каждый TR оказывается в tbody, ну по крайней мере так отображает firebug, как с этим бороться?

cyber 19.08.2012 21:44

если есть готовый код , выложите его а то не совсем понял что нужно

Jeremen 20.08.2012 11:26

cyber, вот такой код:
table.innerHTML = '<thead> \
				<tr> \
					<th>№</th> \
					<th>Жёлтый</th> \
					<th>Оранжевый</th> \
					<th>Розовый</th> \
					<th>Красный</th> \
					<th>Зелёный</th> \
					<th>Чёрный</th> \
					<th>Голубой</th> \
					<th>Синий</th> \
				</tr> \
				</thead>';
				table.innerHTML += '<tfoot><tr><td colspan="9"><button id="readyButton">Готово!</button></td></tr></tfoot>';
				for (var i = 0; i < result.listOfColors.length; i++) {
					table.innerHTML += '<tr> \
					<td>' + (i + 1) + '</td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="yellow" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="orange" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="hotPink" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="red" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="green" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="black" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="deepSkyBlue" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="mediumBlue" /></td> \
					</tr>';
				}

Смотря на структуру HTML через firebug он показывает каждый tr обвернутым в tbody, хотя как видите здесь никакого tbody нет.

cyber 20.08.2012 14:55

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <script>

var table = document.createElement('table');
      
var TableContent = '<thead> \
				<tr> \
					<th>№</th> \
					<th>Жёлтый</th> \
					<th>Оранжевый</th> \
					<th>Розовый</th> \
					<th>Красный</th> \
					<th>Зелёный</th> \
					<th>Чёрный</th> \
					<th>Голубой</th> \
					<th>Синий</th> \
				</tr> \
				</thead>';
				TableContent += '<tfoot><tr><td colspan="9"><button id="readyButton">Готово!</button></td></tr></tfoot>';
				for (var i = 0; i <20; i++) {
					 TableContent += '<tr> \
					<td>' + (i + 1) + '</td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="yellow" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="orange" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="hotPink" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="red" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="green" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="black" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="deepSkyBlue" /></td> \
					<td><input type="radio" name="' + 'radio' + i + '"value="mediumBlue" /></td> \
					</tr>';
				}      

      
   table.innerHTML =  TableContent   
   document.body.appendChild(table)

    </script>

  </body>
</html>

oneguy 20.08.2012 19:26

Цитата:

Сообщение от Jeremen
Смотря на структуру HTML через firebug он показывает каждый tr обвернутым в tbody, хотя как видите здесь никакого tbody нет.

Цитата:

Сообщение от oneguy
в элементе <table> должен быть обязательно хотя бы 1 <tbody>, и <tr> не может быть непосредственно в <table>, только через <thead>, <tbody> или <tfoot>.

Цитата:

Сообщение от Aetae
Всем браузерам это похрену.(кроме ie в частных случаях)

Взято отсюда: http://javascript.ru/forum/css-html-...tml#post197604


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