Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
3 / 3 / 1
Регистрация: 07.11.2010
Сообщений: 73
1

Изменение позиции объекта

17.12.2014, 15:46. Показов 4899. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Есть div меняющий положение от одной точки к другой, как добавить ещё позицию, чтобы после того, как дойдёт до точки 2, двигался в точку 3? Например сейчас направо и вниз двигается, и как сделать, чтобы потом двигалось вверх..?
Или это на JQuery лучше?
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Документ без названия</title>
</head>
<body>
 
<div id="dat" style="display:inline-block; position:fixed; left:100px; top:200px; width:50px; height:50px; background-color:red;">
</div>
 
 <script type="text/javascript">
 var dat1=document.getElementById("dat");
 function dat(elem) {
    var left = 0; // начальное значение
    var top = 70;
    function frame() { // функция для отрисовки
        left++;
        top++;
        elem.style.left = left + 'px';
        elem.style.top = top + 'px';
        if (left == 100) { 
          clearInterval(timer); // завершить анимацию
        }
    }
    var timer = setInterval(frame, 10) // рисовать каждые 10 мс
}
dat(dat1);
</script>
 
</body>
</html>
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2014, 15:46
Ответы с готовыми решениями:

Как получить абсолютные позиции объекта Textarea?
kak poluchit absoljutnie posiicii objecta (textarea) ? izvestnie mne sposobi(style.Top, pixelTop,...

Изменение позиции элемента
$b = document.body.clientWidth; if ($b&lt;1280){ document.getElementById(&quot;komics&quot;).style.right =...

Изменение позиции у тега
было вот так и работало &lt;script type=&quot;text/javascript&quot;&gt; function forText(width){ var...

dhtml - изменение позиции DIVа
function badd(value) { var rv = (document.getElementById) ?...

3
80 / 80 / 53
Регистрация: 22.03.2013
Сообщений: 271
17.12.2014, 17:29 2
Не понятно в чем проблема, в чем трудность?, делайте хоть 100 позиций
1
Модератор
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
18.12.2014, 09:10 3
Лучший ответ Сообщение было отмечено Harrison как решение

Решение

Harrison, Движение-жизнь!

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
console.clear();
 
var object = {
  element : document.getElementById("block"),
  indexVector : 0, // индекс текущего вектора в массиве vectors
  paths : [], // список путей, который должен пройти объект, что бы сменить направление
  vectors : [], // список векторов, каждый соответствует своей точке
  lastTurn : []
};
 
object.vectors = [
  // заполняем векторы
  [4,0],
  [0,4],
  [4,0],
  [4,3]
];
object.paths = [
  // длины путей
  200,
  420,
  300,
  650
];
object.lastTurn = [object.element.offsetLeft, object.element.offsetTop];
 
/* Алгоритм будет таков
   Изначально задумывалось, что бы была проверка по координатам, 
   если объект дошел до нужной координаты, то меняем на правление
   Но, тут куча подводных камней, 
   а вдруг мы указали неверно вектор и объект не пройдет через координату,
   да и проверять координаты в данном случае не очень верно.
   Мы будем использовать расстояние между двумя точками, 
   как только объект пройдет нужное расстояние, меняем ему вектор направления
   Нет проблем с координатами, проверка выглядит легче
   Просто запоминаем место, где объект повернул в последний раз 
   и считаем расстоянием между текущим положением объекта и тем самым местом поворота
*/
 
// движение объекта
object.move = function () {
    if(!this.paths[this.indexVector]) return clearInterval(time); // если прошли весь путь, то заканчиваем движение
    var v = this.vectors[this.indexVector];
    
    // Двигаем объект
    this.element.style.left = this.element.offsetLeft +  v[0] + "px";
    this.element.style.top = this.element.offsetTop + v[1] + "px";
  
    // Проверяем
    var x = this.element.offsetLeft;
    var y = this.element.offsetTop;
    
    // длина пройденного пути
    // считаем вектор между двумя точками
    var _vector = [Math.abs(this.lastTurn[0] - x), Math.abs(this.lastTurn[1] - y)];
    // считаем его длину
    var path = Math.sqrt(_vector[0] * _vector[0] + _vector[1] * _vector[1] );
  
    console.log(path, this.paths[this.indexVector]);
    // Если прошли столько, сколько нам нужно, поворачиваем
    if(path >= this.paths[this.indexVector]) {
       this.indexVector ++;
       this.lastTurn = [x,y];
    }
    
};
 
 
var time = setInterval(function () {
  object.move([1,0]);
},17);
1
3 / 3 / 1
Регистрация: 07.11.2010
Сообщений: 73
19.12.2014, 08:50  [ТС] 4
Вот ещё вариант, кажется проще:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Документ без названия</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script>    
$(function() {
    
   $('div').css({"position": "fixed", "z-index": "1", "min-width": "0"});
    var timespan = 500;
    cycleEffects();
    function cycleEffects() {
        $('div')
            .animate({left: "+=100"}, timespan, "linear" )
            .animate({left: "-=100", top: "+=200"}, timespan, "linear")
            .animate({left: "+=100"}, timespan, "linear")
            .animate({left: "-=100", top: "-=200"}, timespan, "linear", cycleEffects)
    }
});
</script>
 
<body>
 
<div id="dat" style="display:inline-block; position:fixed; left:100px; top:200px; width:50px; height:50px; background-color:red;">
</div>
 
</body>
</html>
0
19.12.2014, 08:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2014, 08:50
Помогаю со студенческими работами здесь

Изменение позиции бэкграунда через массив
Всем привет! Я новичок, поэтому сильно не пинайте за тривиальные вопросы. Суть проблемы такова....

циклическое изменение размера объекта
Нужно написать скрипт, чтобы при наведении каждый раз мыши на картинку заданного размера (в нашем...

Не работает динамическое изменение объекта
Привет. Вот создал типа калькулятор с динамикой. А не работает. Помогите мне найти ошибку. Вот...

Стелевое изменение объекта ссылка
При наведении курсором на ссылку изменение стилевого оформления: color, font-style, удаление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru