Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2012, 15:38
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

Движение по диагонали
Код выкладывать не стану. Вопрос теоретический большей частью (если понадобится - выложу). Необходимо движение элемента к определённому месту по горизонтали и по вертикали. Задача состоит в том, чтобы, если он достигает координат по вертикали, движение по вертикали останавливается, а по горизонтали продолжается до своих координат, ну и наоборот соответственно. Вопрос - нужно ли писать две разные функции для движение по каждой из оси или можно обойтись одной (через лог. операторы наверное..)?
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2012, 15:42
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

не не не, без этого...
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2012, 15:52
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Да зачем две функции. итоговые размеры все равно проверять надо.
x=(x>max_x)?max_x:Math.floor(x);
y=(y>max_y)?max_y:Math.floor(y);

Последний раз редактировалось Rootpassword, 02.03.2012 в 15:57.
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2012, 16:09
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

Ах, про ньюанс забыл. У меня стоит setInterval, который стопится, если достигаются координаты..
function frame() {
		top++;
		left++;
		document.getElementById("ger").style.top = top + "px";
		document.getElementById("ger").style.left = left + "px";
		if (top == rest) {     // rest - конечная коорд. по верт., аналогично - resl
		clearInterval(timer);
	        }
	}
	var timer = setInterval(frame, 10);

И вот нужно, что-то с "if (top == rest)" сотворить...
А зачем Math.floor? Это же для дробных, да?
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2012, 16:13
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

Maxmaxmахimus,
логические операторы...я что-то не так сказал..?
Ответить с цитированием
  #6 (permalink)  
Старый 02.03.2012, 16:39
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

<style type="text/css">
div {
    background: blue;
    position: absolute;
    width: 50px;
    height: 50px;
}
</style>
<div id="div" />

<script type="text/javascript">
var i = 0;

!function() {
	if(++i <= 100) {
        document.getElementById('div').style.cssText = 'top:' + i + 'px; left:' + i + 'px';
        setTimeout(arguments.callee, 10);
	}
}();
</script>

Последний раз редактировалось monolithed, 02.03.2012 в 16:43.
Ответить с цитированием
  #7 (permalink)  
Старый 02.03.2012, 16:47
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

monolithed,
У меня left и top разные координаты. Там не чёткая диагональ. По идеи, он должен сначала двигаться чётко по диагонали, а достигая одного из пределов топа или лефта, двигаться уже по одной из осей, стремясь к её пределу..
Ответить с цитированием
  #8 (permalink)  
Старый 02.03.2012, 16:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

alexandr_v-vich,
Ну так в чем проблема? опредилите условия и обнуляйте счетчик i по достижению нужного условия чтобы продолжить движение
Ответить с цитированием
  #9 (permalink)  
Старый 02.03.2012, 16:59
Аспирант
Отправить личное сообщение для alexandr_v-vich Посмотреть профиль Найти все сообщения от alexandr_v-vich
 
Регистрация: 30.01.2012
Сообщений: 78

А не затруднит вас привести похожий пример. Я новичок в этом деле и не программист уж ни разу. Меня и так ваш пример напугал, разобраться в нём ещё потребуется время. А последний комментарий я уже не воспринимаю....)
Ответить с цитированием
  #10 (permalink)  
Старый 02.03.2012, 17:04
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

function frame() {
top=(top>rest)?rest:(top+1);
left=(left>resl)?resl:(left+1);
        document.getElementById("ger").style.top = top + "px";
        document.getElementById("ger").style.left = left + "px";
        if ( (top >= rest) && (left>=resl) ) {  
        clearInterval(timer);
            }
    }
    var timer = setInterval(frame, 10);

вроде того
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фон по диагонали DyadkaSashka Общие вопросы Javascript 27 18.01.2011 18:14
Срезание дива по диагонали Acrossfy jQuery 15 15.10.2010 11:00
Движение объекта в ячейке определённого размера lammeR Общие вопросы Javascript 4 20.04.2010 17:14
движение объекта lammeR Общие вопросы Javascript 5 08.03.2010 01:04
Движение скроллинга окна по направлению миши bobus123 Events/DOM/Window 0 02.09.2009 15:17