Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2007, 18:12
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Теряется event при перемещении объекта (Drag&Drop)
Есть такая функция в классе которая срабатывает при клике мышки

this.init = function()
{
    var self = this;
    
    this.item.onmousedown = function() 
    {
        self.setup();
    }
}

this.setup = function()
{
       var event = window.event;
}


Но если быстро перемещать объект по экрану то теряется событие. Объект остается на месте, мышка уходит в сторону.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2007, 18:15
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

Во-первых, window.event есть только у IE, поэтому в других браузерах у тебя события не будет вообще.

Во-вторых, какое именно событие теряется ?
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2007, 18:24
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Я неправильно делаю, поэтому вот с вопросами

я увидел где то такое примерно

function setup(e)
{
    var e = window.event || e;
}


А событие теряется может я неправильно назвал, сама проблема в том что когда начинаю перемещать объект по экрану, то часто объект остается на месте, а курсор мышки идет дальше.
И теряется событие onmouseup при этом
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2007, 18:27
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Если нужно могу привести полный код, там немного
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2007, 18:47
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

Приведи, пожалуйста..
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2007, 19:00
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

function dhtmlDrag()
{
	this.init = function(item)
	{
		this.object = item;
		this.obj	= item.obj;
		this.parent = item.obj.parentNode;
		
		// Клонируем объект
		this.clone();
		
		var self = this;
		
		this.item.onmousedown = function(e)
		{
			if(typeof e == "undefined")
			{
				e = event;
			} 
    		
    		self.setup(e);
		}
	}
	
	this.distance = function(e)
	{
		this.distancex = e.clientX - this.initmousex;
		this.distancey = e.clientY - this.initmousey;
		
		this.move(e);
	}
	
	this.move = function(e)
	{
		var left = this.distancex + this.initx;
		var top  = this.distancey + this.inity;
		
		this.item.style.left = left + "px";
		this.item.style.top  = top + "px";
	}
	
	this.setup = function(e)
	{
		// Задаем класс
		this.item.className = 'file_item_clone file_item_show';
		
		this.initmousex = e.clientX;
		this.initmousey = e.clientY;
		
		this.initx = this.item.offsetLeft;
		this.inity = this.item.offsetTop;
		
		var self = this;
		
		this.item.onmousemove = function(e)
		{
			if(typeof e == "undefined")
			{
				e = event;
			}
			
			self.distance(e);
		} 
		
		this.item.onmouseup = function(e)
		{
			
			if(typeof e == "undefined")
			{
				e = event;
			}
			
			self.stop(e);
		}
	}
	
	this.stop = function(e)
	{
		e.onmousemove = null;
		e.onmouseup	 = null;
		
		// Задаем класс
		this.item.className = 'file_item_clone file_item_hidden';
		
		// Указываем позицию объекту
		this.item.style.top = this.pos.top - 5 + 'px';
		this.item.style.left = this.pos.left - 4 + 'px';
	}
	
	this.clone = function()
	{
		// Получаем позицию оригинала
		this.pos = this.getObjectPosition(this.obj);
		
		// Клонируем объект
		this.item = this.obj.cloneNode(true);
		
		// Задаем класс
		this.item.className = 'file_item_clone file_item_hidden';
		
		// Указываем позицию объекту
		this.item.style.top = this.pos.top - 5 + 'px';
		this.item.style.left = this.pos.left - 4 + 'px';
		
		this.obj.parentNode.parentNode.appendChild(this.item);
	}
	
	// Получение позиции объекта
	this.getObjectPosition = function(obj) 
	{
  		var position = { left:0, top:0 };
  		
  		while (obj) 
  		{
    		position.left += obj.offsetLeft;
    		position.top  += obj.offsetTop;
    		obj = obj.offsetParent;
  		}
  		
  		return position;
	}
}
Ответить с цитированием
  #7 (permalink)  
Старый 01.07.2007, 19:15
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Кажится начинаю понимать

не this.item.onmousemove = function(e)
а document.onmousemove = function(e)
Ответить с цитированием
  #8 (permalink)  
Старый 01.07.2007, 19:16
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

Ага =) И up/down то же самое..
Ответить с цитированием
  #9 (permalink)  
Старый 01.07.2007, 19:19
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Все получилось, но единственное, когда начинаю только кликать и пытаться тянуть объект, то у меня появляется плюс возле курсора, и картинка открывается в новом окне
Ответить с цитированием
  #10 (permalink)  
Старый 01.07.2007, 19:26
Интересующийся
Отправить личное сообщение для seagor Посмотреть профиль Найти все сообщения от seagor
 
Регистрация: 01.07.2007
Сообщений: 10

Из за чего такой баг может возникать?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск