Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.07.2012, 23:24
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Да, скриншот мелковат, так получается чего или нет? Посоветованный пример посмотрели?
PS: javascript: в обработчиках уже устарело, поэтому не нужно
функцию rist вынести за пределы цикла
Ответить с цитированием
  #12 (permalink)  
Старый 30.07.2012, 23:37
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

<style>
	div {
		border: solid 1px;
		width: 50px;
		height: 50px;
	}
</style>

<div id="div" style="position: absolute; top: 0px; left: 0px; border: none; ">
	<button>click</button>
	<div>div1</div>
	<div>div2</div>
	<div>div3</div>
</div>

<script>
window.onload = function () {
	var div = document.getElementById('div');
	var but = div.children[0];
	
	but.onclick = function () {
		var count = 200;
		var step = 6;
		var coof = 1;
		var goLeft = function (elem) {
			elem.style.left = parseInt(elem.style.left) + step;
		}
		for (var i = 0; i < count; i += step) {
			setTimeout(function () {goLeft(div)}, i*coof);
		}
	}
  
}
</script>
Ответить с цитированием
  #13 (permalink)  
Старый 04.08.2012, 16:18
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

причём тут это? Ваш код передвигает весь родителський див с потомками, а не набор определённых дивов внутри...
не то всё это(
Ответить с цитированием
  #14 (permalink)  
Старый 04.08.2012, 17:16
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Romeo
тут вызов рекурсивный
нет у Вас рекурсивного вызова и правильно один раз выполняется
если бы вместо setTimeout(rist,0); написали бы rist()- была бы рекурсия
Ответить с цитированием
  #15 (permalink)  
Старый 04.08.2012, 23:09
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

Сообщение от vadim5june Посмотреть сообщение
нет у Вас рекурсивного вызова и правильно один раз выполняется
если бы вместо setTimeout(rist,0); написали бы rist()- была бы рекурсия
аналогичные выражения. включал счётчик, проверял.
Ответить с цитированием
  #16 (permalink)  
Старый 04.08.2012, 23:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Romeo,
Длинный код - жарко - лучше дебажить или с готовой странички или минималистический код с HTML работающий в топике и демонстрирующий проблему...

Просто подобная задача была вчера - полторы штуки - а тут бесплатно и напрягайся,
Ответить с цитированием
  #17 (permalink)  
Старый 05.08.2012, 10:07
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Romeo
причём тут это? Ваш код передвигает весь родителський див с потомками, а не набор определённых дивов внутри...
не то всё это(
В чём проблема доработать код функции goLeft (которую логичнее было бы назвать goRight), и перемещать необходимые вам элементы, я лишь показал пример как это можно сделать (в том числе, не объявляя в цикле функцию, её вообще можно вынести за пределы обработчика onclick) или вам нужен готовый скрипт с нуля?
Ответить с цитированием
  #18 (permalink)  
Старый 05.08.2012, 18:49
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

готовый скрипт с нуля я и сам написать могу, я лишь только попросил расставить правильно кавычки в первом сообщении)
ладно, сейчас попробую переделать вашу функцию... посмотрим что получиться)
спасибо.
Ответить с цитированием
  #19 (permalink)  
Старый 05.08.2012, 19:52
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

вот, сделал
Всем огромное спасибо, и отдельно Бесу за пример скрипта который я переделал)
<style>
	div div {
		border: solid 1px;
		width: 50px;
		height: 50px;
	}
</style>

<div style="position: relative; top: 0px; left: 0px;">
	<div onclick="qwe(id)" style="position: absolute; top: 0px; left: 0px;" id="1">div1</div>
	<div onclick="qwe(id)" style="position: absolute; top: 50px; left: 0px;" id="2">div2</div>
	<div onclick="qwe(id)" style="position: absolute; top: 100px; left: 0px;" id="3">div3</div>
        <div onclick="qwe(id)" style="position: absolute; top: 150px; left: 0px;" id="4">div4</div>
</div>

<script>

function qwe(id)
{
var count = 200;
var step = 6;
var coof = 1;
for (var j = id; j < 5; j++) {
     for (var i = 0; i < count; i += step) {
      setTimeout("document.getElementById('"+j+"').style.left = parseInt(document.getElementById('"+j+"').style.left) + parseInt('"+step+"')",i*step);
	}
	}
}
</script>

Последний раз редактировалось Romeo, 05.08.2012 в 20:06.
Ответить с цитированием
  #20 (permalink)  
Старый 05.08.2012, 21:51
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Можно так (хотя при быстрых кликах не будет точности)

<style>
	#div div {
		position: absolute;
		border: solid 1px;
		width: 50px;
		height: 50px;
	}
</style>

<div id="div">
	<div style="left: 0px; top: 0px">div1</div>
	<div style="left: 0px; top: 50px;">div2</div>
	<div style="left: 0px; top: 100px;">div3</div>
	<div style="left: 0px; top: 150px">div4</div>
</div>

<script>
window.onload = function () {
	var div = document.getElementById('div');
	var divs = div.children;
	var len = divs.length;
	var count = 200;
	var step = 6;
	var coof = 1;
	var mas;
	
	function goRight(mas) {
		var len = mas.length;
		for (var i = 0; i < len; i++) {
			mas[i].style.left = parseInt(mas[i].style.left) + step;
		}
	}

	div.onclick = function (e) {
		e = e || event;
		var target = e.target || e.srcElement;
		mas = [];
		for (var i = 0; i < len; i++) {
			if (target == divs[i]) {
				for (var j = i; j < len; j++) {
					mas.push(divs[j]);
				}
				break;
			}
		}
		for (var i = 0; i < count; i += step) {
			setTimeout(function () {goRight(mas)}, i*step);
		}
	}
	
}
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout как он работает??? namo86 Общие вопросы Javascript 16 02.02.2011 09:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36