Абсолютное позиционирование, вероятно, будет лучшим способом сделать это, да. (Я бы не положил руку на сердце, говоря, что это способ only , я уверен, что вы могли бы играть в другие игры, чтобы делать что-то подобное, но вы, вероятно, не хотите.)
Вам не нужно делать это в процентах, если это не присуще вашей проблеме. Следующее будет удачно сделать элемент абсолютно позиционированным, а затем переместит его на 5 пикселей вправо и вниз каждую 10-ю секунду для увеличения числа итераций:
function moveDemo(element, count) {
element.style.position = "absolute";
moveit();
function moveit() {
element.style.left = ((parseInt(element.style.left) || 0) + 5) + "px";
element.style.top = ((parseInt(element.style.top) || 0) + 5) + "px";
if (count-- > 0) {
setTimeout(moveit, 100);
}
}
}
Это просто сырой JavaScript, но такие фреймворки, как jQuery, Prototype, Closure, YUI и т. Д., Помогают вам во многих вещах и заслуживают изучения. Например, если вы используете вышеупомянутое, если вы заранее не сделаете элемент абсолютно позиционированным, а также не укажете левый и верхний стили для самого элемента (через встроенный атрибут style
), он перейдет к 0,0 при начало, а затем начать двигаться оттуда. Фреймворки могут помочь вам с довольно сложной задачей выяснить, где находится встроенный элемент, прежде чем сделать его абсолютно позиционированным.
Вот полный пример, который не зависит от каркаса (но, вероятно, должен, по крайней мере, для определения начальной позиции 'myElement'):
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Move It Demo Page</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
#myElement {
border: 1px solid black;
}
</style>
<script type='text/javascript'>
function startMoving() {
moveDemo(document.getElementById('myElement'), 10);
}
function moveDemo(element, count) {
element.style.position = "absolute";
moveit();
function moveit() {
element.style.left = ((parseInt(element.style.left) || 0) + 5) + "px";
element.style.top = ((parseInt(element.style.top) || 0) + 5) + "px";
if (count-- > 0) {
setTimeout(moveit, 100);
}
}
}
</script>
</head>
<body><div>
<input type='button' value='Start' onClick="startMoving();">
<div id='myElement'>I'm on the move</div>
</div></body>
</html>