Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Движение по диагонали (https://javascript.ru/forum/misc/26261-dvizhenie-po-diagonali.html)

alexandr_v-vich 02.03.2012 15:38

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

alexandr_v-vich 02.03.2012 15:42

не не не, без этого... :)

Rootpassword 02.03.2012 15:52

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

alexandr_v-vich 02.03.2012 16:09

Ах, про ньюанс забыл. У меня стоит 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? Это же для дробных, да?

alexandr_v-vich 02.03.2012 16:13

Maxmaxmахimus,
логические операторы...я что-то не так сказал..?

monolithed 02.03.2012 16:39

<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>

alexandr_v-vich 02.03.2012 16:47

monolithed,
У меня left и top разные координаты. Там не чёткая диагональ. По идеи, он должен сначала двигаться чётко по диагонали, а достигая одного из пределов топа или лефта, двигаться уже по одной из осей, стремясь к её пределу..

monolithed 02.03.2012 16:53

alexandr_v-vich,
Ну так в чем проблема? опредилите условия и обнуляйте счетчик i по достижению нужного условия чтобы продолжить движение

alexandr_v-vich 02.03.2012 16:59

А не затруднит вас привести похожий пример. Я новичок в этом деле и не программист уж ни разу. Меня и так ваш пример напугал, разобраться в нём ещё потребуется время. А последний комментарий я уже не воспринимаю....)

Rootpassword 02.03.2012 17:04

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);

вроде того


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