javascript и drag'n'drop

D
На сайте с 24.03.2007
Offline
24
1132

Здравствуйте,

Задача такая:

есть слой 1, который надо передвигать,

"управляющий" слой 2, при движении мышкой по которому двигается слой 1,

причем движение слоя 1 ограничено жесткими рамками

Сам скрипт:

var moveState = false;

// Переменные координат мыши в начале перемещения, пока неизвестны

var x0, y0;

// Начальные координаты элемента, пока неизвестны

var divX0, divY0;

//Функция для определения координат мыши

function defPosition(event) {

var x = y = 0;

if (document.attachEvent != null) { // Internet Explorer & Opera

x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;

y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;

}

if (!document.attachEvent && document.addEventListener) { // Gecko

x = event.clientX + window.scrollX;

y = event.clientY + window.scrollY;

}

return {x:x, y:y};

}

// Функция инициализации движения

// Записываем всё параметры начального состояния

function initMove(event) {

var event = event || window.event;

x0 = defPosition(event).x;

y0 = defPosition(event).y;

divX0 = parseInt(document.getElementById('1').style.left);

divY0 = parseInt(document.getElementById('1').style.top);

moveState = true;

}

// Если клавишу мыши отпустили вне элемента движение должно прекратиться

document.onmouseup = function() {

moveState = false;

}

// Функция обработки движения:

function moveHandler(div, event) {

var event = event || window.event;

if (moveState) {

offsetx=defPosition(event).x-x0;

offsety=defPosition(event).y-y0;

absoluteX=-defPosition(event).x+startx;

absoluteY=-defPosition(event).y+starty;

if (parseInt(document.getElementById('1').style.left)>=-400){

divX0=-500;

x0=defPosition(event).x;

}

if (parseInt(document.getElementById('1').style.left)<=-600){

divX0=-500;

x0=defPosition(event).x;

}

if (parseInt(document.getElementById('1').style.top)>=100){

divY0=0;

y0=defPosition(event).y;

}

if (parseInt(document.getElementById('1').style.top)<=-100){

divY0=0;

y0=defPosition(event).y;

}

document.getElementById('1').style.left = divX0 + offsetx;

document.getElementById('1').style.top = divY0 + offsety;

}

}

</script>

....

....

<div id=1 style='width:1000px; height:600px; position:absolute; background-color:black;'>

</div>

<div id=control style='width:800;height:400; position:absolute; border:2px solid; top:100;left:-400; z-index:5;'

onmousedown = 'initMove(this, event);'

onmouseup = 'moveState = false;'

onmouseout = 'moveState = false;'

onmousemove = 'moveHandler(this, event);'>

</div>

Скрипт глюченный-переглюченный:

Не получается ограничить рамки движения слоя 1 и в Mozille и IE иногда движение не прекращается при отпускании кнопки мыши

Спасибо.

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Не знаю как по Вашему скрипту, но посмотрите может будет полезной библиотека http://www.walterzorn.com/dragdrop/dragdrop_e.htm

update: особенно пример с фейдером или как это назвать, которым цвет меняют. Возможно это то, что Вам нужно :)

ixRock
На сайте с 14.11.2006
Offline
46
#2

ТС скрипт сами писали? Переделывать и разбиратся в нём кто там и каких дров наломал неохото, сам давно писал скрипт "драг энд дропа", вот посмотрите:

http://ixrock.net/articles/19/details может возьмёте за основу...

Работаю [S]за еду и секас[/S] с XHTML, CSS, XSLT, JS, PHP. Если что, вот тут (http://www.mintdesign.ru/) некоторые мои работы. Контакты: ася 344-ноль86-276, мыло ixrock@gmail.com
-
На сайте с 07.12.2005
Offline
97
-K-
#3

Вот сюда посмотрите http://developer.yahoo.com/yui/dragdrop/

Polimer
На сайте с 01.09.2006
Offline
84
#4
denisrog:
Задача такая...

Сейчас модно использовать jquery, всего пара строчек.

Программные решения для бизнеса. (http://frontsoft.ru/) На заказ. Дорого.
Ayavryk
На сайте с 11.10.2003
Offline
209
#5
Polimer:
Сейчас модно использовать jquery, всего пара строчек.

Всего пара строчек кода и библиотека расширений на 150-200К. При этом все тормозит несусветно.

Хотя драг-дроп отдельный был. Но глючил безбожно. Впрочем остальные библиотеки не лучше. :(

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий