Плавное перемещение div с помощью мыши
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Плавное перемещение div с помощью мыши Expand / Collapse
Автор
Сообщение
09.03.2007 17:14
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 14.03.2007 16:19
Сообщ.: 6, Visits: 14
Цель: реализовать нормальное перемещение div с помощью мыши (имитация перетаскивания обычного окна)
Моя Реализация:
-------------Div который нужно двигать-----------------------------------------------------------
div ...
дальше идёт это
....
document.getElementById("PostBox").onmousemove = PostMouseMove;
document.onmouseup = PostMouseUp;
document.getElementById("PostBox").onmousedown = PostMouseDown;
-------------------------------------------------------------------------------------------------
var flag_drop=0;
var mX=0;
var mY=0;
Left=200;
Top=100;
var dx=7;
var dy=5;
var width,height;
-------------------------------------------------------------------------------------------------
if (self.innerHeight) // all except Explorer
{
width = self.innerWidth;
height = self.innerHeight;
}
else if (document.documentElement && document.documentElement.clientHeight)
// Explorer 6 Strict Mode
{
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
}
else if (document.body) // other Explorers
{
width = document.body.clientWidth;
height = document.body.clientHeight;
}
function PostMouseDown(e)
{
flag_drop=1;
if (typeof event != "undefined")
{
mX = window.event.clientX + document.body.scrollLeft;
mY = window.event.clientY + document.body.scrollTop;

}
else
{
mX=e.pageX;
mY=e.pageY;
}
}
function PostMouseUp(e)
{
flag_drop=0;
}
function PostMouseMove(e)
{
if (flag_drop)
{
if (typeof event != "undefined")
{
//for IE ещё не написано..
}
else
{
var nX=e.pageX;
var nY=e.pageY;
var newLeft,newTop;
dx=nX-mX;
dy=nY-mY;
if (nX-mX>0){newLeft=Left+dx;}
if (nX-mX<0){newLeft=Left+dx;}
if (nY-mY<0){newTop=Top+dy;}
if (nY-mY>0){newTop=Top+dy;}

if (условия для не выхода за границу окна)
{
if (nX-mX>0){document.getElementById("PostShadow").style.left =Left+dx+"px";Left=Left+dx;}
if (nX-mX<0){document.getElementById("PostShadow").style.left =Left+dx+"px";Left=Left+dx;}
mX=nX;

}
if (условия для не выхода за границу окна)
{
if (nY-mY<0){document.getElementById("PostShadow").style.top =Top+dy+"px";Top=Top+dy;}
if (nY-mY>0){document.getElementById("PostShadow").style.top =Top+dy+"px";Top=Top+dy;}
mY=nY;
}

}
}
}
Всё это двигается довольно ужасно.. (медленно и рывками..перерисовывается постоянно..)
Кто знает в чём проблема.. или как реализовать по-другому?
Спасибо!
Сообщ. #911385
09.03.2007 21:14
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.05.2008 20:04
Сообщ.: 269, Visits: 2 381
Вот тебе простейший пример перемещение div'a (написаный под EI):

<html>
<head>
<title> </title>
<script>
var cur="";
var d=document
function down_action()
{ if (window.event.srcElement.tagName=="DIV")
{ cur=window.event.srcElement.id;
d.all[cur].style.left=window.event.clientX
d.all[cur].style.top=window.event.clientY
}
}
function up_action() { cur="";}
function move_action() {
if (cur!="")
{
d.all[cur].style.left=window.event.clientX
d.all[cur].style.top=window.event.clientY
}
event.canselBubble=true;
event.returnValue=false;
}
</script>
</HEAD>
<body onmousedown='down_action()' onmousemove='move_action()' onmouseup='up_action()'>
<div id=p1 style="position:absolute;top:100; left:100;cursor:hand;">текст1</div>
<div id=p2 style="position:absolute;top:100; left:250;cursor:hand;">текст2</div>
</body>
</HTML>

----------------------------------
Я безработный...
Возьмите меня на работу. =)

Сообщ. #911397
13.03.2007 18:46
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 14.03.2007 16:19
Сообщ.: 6, Visits: 14
Спасибо.. Эта програма работает в простейшем случае..(текст двигается)
Но попробовал использовать это у себя для большого видимого div, то во-первых он в приведённом варианте почему-то не работает, а в моём..из-за перерисовки, двигается не очень хорошо.
Сообщ. #911505
13.03.2007 23:19
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.05.2008 20:04
Сообщ.: 269, Visits: 2 381
m31 (13.03.2007)
Спасибо.. Эта програма работает в простейшем случае..(текст двигается)
Но попробовал использовать это у себя для большого видимого div, то во-первых он в приведённом варианте почему-то не работает, а в моём..из-за перерисовки, двигается не очень хорошо.

Вот подобие того что ты пытаешься написать... Но работает только в Internet Explorer 6

<HTML>
<HEAD>
<TITLE> Пример фреймов </TITLE>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script>
var cur="";
var d=document
function down_action(){
if ((window.event.srcElement.tagName=="TD")&&(window.event.srcElement.id=="p1")) {
   cur="p3";
d.all[cur].style.left=window.event.clientX
d.all[cur].style.top=window.event.clientY 
}
else {
cur="";}
}
function up_action() { cur="";}
function move_action() {
if (cur!="")
{
d.all[cur].style.left=window.event.clientX
d.all[cur].style.top=window.event.clientY
}
event.canselBubble=true;
event.returnValue=false;
}

function A() {
p3.style.display="none"
}
</script>
</HEAD>
<body onmousedown="down_action()" onmousemove="move_action();" onmouseup="up_action()">

<h1 id="vvv" style="position:absolute;top:10;left:10">Какой-то текст</h1><br>
<br>
<table id="p3" border=0 cellspacing=0 cellpadding=0 style="position:absolute;top:100;left:100;"><br>
<tr><td id="p1" width=300pt height=10pt bgcolor=blue>ffffffffff<td bgcolor=blue style="color:white;cursor:hand;" onClick="A()">X<br>
<tr width=300pt height=200pt><th colspan=2 bgcolor=gold id="kkk"><br>
<div id="mdiv" style="overflow: scroll;width:311pt;height:210pt;"><br>
<br>
To set up a web application, you must configure your system, define a Dreamweaver site, and connect to a database. This section provides checklists for each task. The procedures are described in the rest of the chapter. <br>
<br>
Configure your system: <br>
Make sure you have a web server.<br>
Install the Microsoft .NET Framework.<br>
Create a root folder. <br>
Define a Dreamweaver site: <br>
Copy the sample files to a folder on your hard disk.<br>
Define the folder as a Dreamweaver local folder.<br>
Define a web server folder as a Dreamweaver remote folder.<br>
Specify a folder to process dynamic pages.<br>
Upload the sample files to the web server.<br>
Connect to the database (local configuration): <br>
Create the connection in Dreamweaver. <br>
<br>
Connect to the database (remote server configuration): <br>
Copy the database to the remote computer and create the connection in Dreamweaver. <br>
<br>
</div>
<tr><td>
</table>

</body>
</HTML>

----------------------------------
Я безработный...
Возьмите меня на работу. =)

Сообщ. #911513
14.03.2007 0:18
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 14.03.2007 16:19
Сообщ.: 6, Visits: 14
Спасибо огромное!!!!
Я уже доточил свой вариант.. вообщем всё работает.. проблема оказалась в том, что я в этот див. загнал большой текстовый редактор фцк эдитор. Вообщем работает в мозиле и в ие.
Осталась покаместь проблема с селектами и раздвижением дивов.
Сообщ. #911514
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 9:39