Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   оптимизация drag and drop (https://javascript.ru/forum/events/31024-optimizaciya-drag-drop.html)

cyber 30.08.2012 21:02

Deff, сделал но теперь еще хуже

cyber 30.08.2012 21:03

пока сделал по быстро только на увлечение, но все равно не работает правильно=(
var zLeft = 0;
var zTop = 0;
function setNewPosition (zoom, width, height) {
 zLeft +=  width / zooming.width() == 1 ? 0 : width / zooming.width();
 zTop += height / zooming.height() == 1 ? 0 : height / zooming.height() ;
 
var i = 0;
points.each(function(index, element) {
 
  var left = posLeft[i];
  var top = posTop[i];

  if (zoom) {
   left *= zLeft;
   top *= zTop;
  } else {
	left /= zooming.width() / width;
   top /= zooming.height() / height;  
	  
	}
	 i++;
   $(this).css({
	  left: Math.round(left) +'px',
	  top: Math.round(top) +'px'  
	 }); 
	 
});
		
	
}

Deff 30.08.2012 21:07

cyber,
А ссылка та же ? *Посмотреть ?
(Думаю Что Аналогичная феня и в карте (тож набег округлений) - в итоге и раздрай.... (Если прошлый раз оно совпадало по идеалогии с картой, то основная погрешность была ток при самых мелких масштабах

cyber 30.08.2012 21:15

http://cyberua.16mb.com/files/

Deff 30.08.2012 21:18

Потом у тьву всё равно нет констант
Должно быть так
left = Left00*zoom
Left00 - это начальное смещениие от лево приведенной к максимальному масштабу карты (константа - не меняемая после установки точки)

zoom - это отношение текущей карты к максимальной величине карты

cyber 30.08.2012 21:20

константа, я с зумом затупил

cyber 30.08.2012 21:26

эм...
смещается на столька же
function setNewPosition (zoom, nWidth, nHeight) {

var i = 0;
points.each(function(index, element) {
 
  var left = posLeft[i];
  var top = posTop[i];
  
  if (zoom) {
   left *=  nWidth / width;
   top *=  nHeight / height;
  } else {
	left /= zooming.width() / width;
   top /= zooming.height() / height;  
	  
	}
	 i++;
   $(this).css({
	  left: Math.round(left) +'px',
	  top: Math.round(top) +'px'  
	 }); 
	 
});
		
	
}

как и тут
function setNewPosition (zoom, width, height) {

points.each(function(index, element) {
 
  var left = parseInt($(this).css('left'));
  var top = parseInt($(this).css('top'));

  if (zoom) {
   left *= width / zooming.width();
   top *= height / zooming.height();
  } else {
	left /= zooming.width() / width;
   top /= zooming.height() / height;  
	  
	}
	 
   $(this).css({
	  left: Math.round(left) +'px',
	  top: Math.round(top) +'px'  
	 }); 
	 
});
		
	
}

cyber 30.08.2012 21:46

Deff, вариантов больше нет?

Deff 30.08.2012 21:49

cyber,
Нун смотреть карту - наверняка и там где-то есть наращивание погрешностей округления

Ксать в Опере - у меня пойнтерв стоят - без шевеления http://cyberua.16mb.com/files/

Гы - перезагрузил какрту - поехали

Ксать - посколь растояние между ними не бегает ( между ними двумя )
Есть предположение - что сейчас ты Left берешь не от той оболочки

Я Думал - что дроп ты делаешь со внешней - а масштаб со внутренней - это так ? или наоборот ?

Т.е left и тоp предполагались от левого верхнего угла карты

cyber 30.08.2012 22:08

Deff,дело не в округлениях.
вот блок
<div class="map" id="map">

<div id="wrapper" class="wrapper">

<div id="zooming" class="zooming-map">
<img src="general.jpg"/>
<a href="#" class="point_on_map" style="left:20%; top:30%;"></a>
<a href="#" class="point_on_map" style="left: 427px; top: 356px; "></a>
<a href="#" class="point_on_map" style="left:1000px; top:800px;"></a>
</div>
</div>

</div>

при вызове скрипта я устанавливаю все точкам значение в px
function setPointPosition(){
	
points.each(function() {

  var coords = $(this).offset();
 
   $(this).css({
	  left: coords.left - coord_elem.left +'px',
	  top: coords.top - coord_elem.top +'px'  
	     
	   
	   }); 
});
	
}

относительно текущего блока /
B coords координаты
<div class="map" id="map">


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