Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передвижение объекта (https://javascript.ru/forum/events/31911-peredvizhenie-obekta.html)

act 25.09.2012 20:38

Передвижение объекта
 
Всем доброго времени, уважаемые знатоки!
Пожалуйста помогите разобраться.

Никак не могу понять как такое сделать:

есть
<div class="field" style="width:500px;height:500px;position:relative;">
	<img src="img.png" at="img">
</div>


Как сделать, чтобы передвигать можно было только внутри этого контейнера field?

Чтобы не выходило за пределы.

var img=$('.field img');
img.mousedown(function() {
	$('.field').mousemove(function(e) {
		img.css({
			'position':'absolute',
			'top':e.pageY-15,
			'left':e.pageX-15
		});
	});
});


Никак не получается, пожалуйста помогите это сделать.
Что я упускаю?(
Исправьте пожалуйста...

Уже какой день не могу никак решить эту задачу.

Aetae 25.09.2012 21:44

Не вижу сложности.
...
if( 
  e.pageY > minY && 
  e.pageY < maxY && 
  e.pageX > minX && 
  e.pageX < maxX
){
        img.css({
            'position':'absolute',
            'top':e.pageY-15,
            'left':e.pageX-15
        });
}
...

mix и max значения берутся естесно от размеров нужного блока кратинки.

act 26.09.2012 07:50

Не работает он не верно перемещается и показывает координаты.
Нужно, чтобы только внутри квадрата, а он получается, что при клике улетает за него.

И вообще координаты не верные почему - то.

Помогите исправить, пожалуйста.

Сделал с offsetX и offsetY теперь вообще она не сдвигается.
И дребежит(

Dmitriyff 26.09.2012 10:15

раз уж вы используете jQuery

воспользуетесь и jQurey ui

пример из "Ограничения перемещений", это конечно не хардкор, но быстрое решение вашей проблемы

act 26.09.2012 14:09

Dmitriyff, это не решит задачу.

Вообщем написал так:

$(document).ready(function() {
	$('.field img').each(function() {
		drag(this);
	});
});


var startX,
	startY,
	offsetX,
	offsetY,
	zindex,
	element;


function intval(intval) {
	intval=parseInt(intval);
	return intval==null || isNaN(n)?0:intval;
}


function drag(obj) {
        obj=$(obj);
	var field=$('.field'),
		target;
	obj.mousedown(function(e) {
		field.unbind('mouseup');
		target=e.target != null?e.target:e.srcElement;
		startX=e.clientX;
		startY=e.clientY;
		offsetX=intval(target.style.left);
		offsetY=intval(target.style.top);
		zindex=target.style.zIndex;
		target.style.zIndex=1000;
		element=target;
		field.mousemove(function(e) {
			element.style.left=(offsetX+e.clientX-startX)+'px';
			element.style.top=(offsetY+e.clientY-startY)+'px';
			obj.mouseup(function() {
				field.unbind('mousemove');
			});
		});
	}
}


Теперь он двигается нормально.
Но возникла проблема, при отдалении или сколле, элемент уходит от мышки( как это решить? Прошу помогите...

Исправьте пожалуйста, что не так.


Часовой пояс GMT +3, время: 16:11.