Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Перемещение объекта с определенной скоростью


Автор: php5 27.8.2007, 17:52
Имеется скрипт который позволяет перемещать обьеты 
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Drag-and-Drop</title>
<link rel="stylesheet" type="text/css" href="Drag-and-Drop_files/style000.css">
<link rel="shortcut icon" href="Drag-and-Drop_files/favicon0.ico">
<meta http-equiv="Content-Type" content="text/html;" >
<meta name="author" content="Зыков Олег Email:o_leg@land.ru">
<meta name="keywords" content=" JavaScript ">
<meta name="description" content=" JavaScript - примеры с комментариями. Drag-and-Drop ">
<style>
body { background-color:99ccff; font-family:"Verdana","Arial","Times New Roman"; }
#obj1 { position:absolute; top:120px; left:300px; color:"333399"; cursor:move; }
#obj2 { position:absolute; top:150px; left:50px; background-image:url("Drag-and-Drop_files/oblako00.gif"); width:190px; height=115px; cursor:move; }
#obj3 { position:absolute; top:200px; left:300px; background-image:url("Drag-and-Drop_files/solnze00.gif"); width:140px; height:150px; cursor:move; }
#obj4 { position:absolute; top:120px; left:550px; background-image:url("Drag-and-Drop_files/oblako00.gif"); width:190px; height=115px; cursor:move; }
#obj5 { position:absolute; top:400px; left:450px; background-image:url("Drag-and-Drop_files/oblako00.gif"); width:190px; height=115px; cursor:move; }
#obj6 { position:absolute; top:450px; left:100px; color:"333399"; font-size:80%; cursor:move; }
#obj7 { position:absolute; top:20px; left:25px; text-align:left; font-family:'Arial','Verdana','Times New Roman'; font-size:24pt; font-weight:bold; margin-top:10px; margin-right:20px; margin-bottom:10px; margin-left:20px; padding-top:5px; padding-right:100px; padding-left:50px; padding-bottom:5px; background-color:'336699'; cursor:move; }

</style>

<script language="javascript">
/******************************************************************************
Применение - перемещение Drag-and-Drop выбраного объекта.
Комментарий - картинки задаются как фоновое изображение, 
если задавать явно, -  работает некорректно.
******************************************************************************/
var obj ;                                                            //объявляем переменную 
function start(n)                                                    //функция вызывается при помещении курсора на объект
{                 
obj = n ;                                                            //переменной obj присваивается фактический параметр функции start()
document.onmousedown = move;                                         //вызываем функцию move() событием onmousedown
}


function move()                                                      //эта функция была вызвана из функции start()
{
switch (event.type)                                                  //при помощи переключателя switch определенному событию от мыши назначается действие
{
case "mousedown":                                                    //событие  onmousedown определяет координаты контейнера 
     a = event.offsetX + 3 ;                                         //к получившимся координатам прибавляем 3 ( коррекция, относительно края окна, почему появляется эта разница, - не знаю, но так уж оно есть... )
     b = event.offsetY + 3 ;
     document.onmousemove = move ;                                   //и передает работу с функцией событию onmousemove  
case "mousemove":    
     document.all(obj).style.pixelLeft = event.x - a ;               //расстяние от левого края окна до курсора будет равно координатам курсора относительно окна, минус координаты курсора, относительно контейнера, на момент предыдущего события мыши
     document.all(obj).style.pixelTop = event.y - b ;    
     document.onmouseup = move ;                                     //передача работы с функцией событию onmouseup
     break; 
case "mouseup":                                                      
     document.onmousemove = null ;                                   //при событии мыши onmouseup, - событие onmousemove отменяется
     break;     
}
}
</script>
</head>
<body>





<div id="obj1" onMouseOver="start('obj1')";><h2>Солнце и облака</h2></div>
<div id="obj2" onMouseOver="start('obj2')";></div>
<div id="obj3" onMouseOver="start('obj3')";></div>
<div id="obj4" onMouseOver="start('obj4')";></div>
<div id="obj5" onMouseOver="start('obj5')";></div>
<div id="obj6" onMouseOver="start('obj6')";><p>Все, что находится на этой странице, <br>можно перемещать по всему экрану, <br>используя “Drag-and-Drop”.   </p></div>
<div id="obj7" onMouseOver="start('obj7')";><a class="headLink" href="http://www.legal.web.ur.ru/index.html" title="Вернутся на главную страницу">legal.web.ur.ru</a></div>



</body>
</html>
<!-- This document saved from http://www.legal.web.ur.ru/drag_and_drop.html -->



Как его можно модифицировать что бы можно было перемешать объект с  определенной скоростью т.е что бы происходила небольшая задержка 

Автор: Ghirik 28.8.2007, 10:05
Обьясните понятнее. Что значит перемещать с определенной скоростью? Скорость определяется скоростью ведения мышки. Или вам нужно чтобы они сами ездили с определенной скоростью?

Автор: php5 28.8.2007, 12:36
Цитата

Скорость определяется скоростью ведения мышки.


именно это я имел в виду  smile 

Автор: Ghirik 28.8.2007, 17:09
Ну объекты перемещаются ведь.... со скоростью мыши... Глючит всё, но скорость то причем?
И вы вопрос задаете, дак портянку то обрежьте, лишнее всё удалите, оставьте один-два объекта. 
Задержка выполнения задается функцией setTimeout(выполняемая функция, время задержки миллисекунды)

Автор: SelenIT 28.8.2007, 17:29
php5, Вы хотите инерцию изобразить, что ли, чтоб объекты тягались за курсором мыши, как игрушечная машинка на веревочке?

Автор: Ghirik 28.8.2007, 17:47
SelenIT, раз уж вы про замедление движения заговорили, может подскажете.
Какой множитель используют для значения времени, чтобы объект двигался вначале быстро, а по мере приближения к заданой позиции замедлял движение?

Автор: SelenIT 28.8.2007, 17:54
Ghirik, классический вариант, насколько мне известно - делать шаг смещения пропорциональным оставшемуся расстоянию до цели.

Автор: Ghirik 28.8.2007, 17:57
Спасибо smile , я где-то уже такой прием встречал, но не касаемо программирования.

Автор: php5 29.8.2007, 09:41
SelenIT ? а как сделать эту инерцию при движении , в каком месте в моем коде нужно вызывать функцию setTimeout() 
 smile 

Автор: Ghirik 29.8.2007, 10:54
Вы поймите, чтобы что-то советывать или делать, нужно понимать, что делаешь. Вы просите сделать задержку. Зачем? Вам ненравится как работает скрипт? Что конкретно ненравится? Ненравится его глюкавость? Задержки не помогут. Там какая то несогласованность событий, разбираться в этой несогласованности ни кто не станет, потому, как это неблагодарное занятие. А делать примочки к глюкавому скрипту... вообще...

Вы бы хоть маленький кусочек скрипта сами написали, подтверждающий, что Вы что-то делаете сами. Хоть какие то попытки написать....

Автор: php5 29.8.2007, 12:23
Та все глюки  в своем  скрипте я исправил, выложил скрипт  с глюком потому что он меньший по общему и понятней, в моем скрипте    принцип перемещении  остался тот же,  меня  интересует конкретный вопрос как сделать инерцию при движении при использовании выше приведенного кода , а не то как сделать что бы он не глючил 

Автор: Ghirik 29.8.2007, 13:40
Цитата

setTimeout(выполняемая функция, время задержки миллисекунды)
классический вариант, насколько мне известно - делать шаг смещения пропорциональным оставшемуся расстоянию до цели. 


Вы себе исправили, а нам и так сойдет. Извините, это хамство.
Вы станете к ржавому ведру приделывать лакированную ручку?
Выложили чужой скрипт, 
http://www.legal.web.ur.ru/drag_and_drop.html
и ждете пока Вам готовенькое выдадут. Думаю, здесь уже не выдадут.
Если Вы смогли разобраться в очередности событий, чтобы исправить глюки, то написать зажержку - плевое дело!

Автор: php5 29.8.2007, 14:20
Ghirik, я что говорил что это мой скрипт ? я даже в исходнике который здесь выложил не убрал ссылки и информацию откуда я его взял , что касается   
Цитата

Вы себе исправили, а нам и так сойдет. Извините, это хамство.

Я уже говорил почему я его выложил таким,  для вас еще раз повторюсь  

выложил скрипт  с глюком потому что он меньший по общему и понятней


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)