Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   проблемы с jQuery и оптимизацией (https://javascript.ru/forum/events/30564-problemy-s-jquery-i-optimizaciejj.html)

cyber 10.08.2012 18:00

да я вообщем и не запутался..
просто я не пойму что с точками.
а на счет margin и padding , их там вообще нет и они обнолены

cyber 10.08.2012 19:55

поправил пару багов, но всеравно эти точки не стоят на месте .
Уже не знаю что с ними делать ....
http://cyberua.16mb.com/files/zoom.html

Deff 10.08.2012 20:08

cyber,

1. Для того чтобы они стояли - Вам необходимо работать не с элементов с id='img' а элементом id='wrapper' и размеры при зуме и cмещение при drag and менять его
а карту ставим таким кодом

<img id='img' src='img/general.jpg' width=100% />
и позиция у него не задана или статис, т. есть элемент вклеен во wrapper

тогда эти <div class="point_on_map"></div> намертво спозиционированы будут к wrapper

у <div id="wrapper"> position: удобная Вам и отличная от static или по умолчанию

cyber 10.08.2012 21:04

хм..
ну это уже ближе к правде, но все равно точки смещаются..
http://cyberua.16mb.com/files/zoom.html
П.с уже дошел до того что пытался понять как у гугла это работает , но чет тяжело читается их код=)

cyber 10.08.2012 22:08

пробовал рассчитать на сколько процентов увеличивается изображение и на столько % сместить точку (относительно начальной позиции) , почти получилось но не пойму откуда погрешность в пару px и за этой погрешности (2-3 пикселя) видно что точка движется

Deff 10.08.2012 22:14

Цитата:

Сообщение от cyber
ну это уже ближе к правде, но все равно точки смещаются..

Ти при зуме сейчас не правишь координаты у .map a, которые и смещают твои точки (при зуме ведь их координаты остаюца старыми или выставляй им смещение в %
И стиль чуть поправь

.map a {
position:absolute;
display:inline:block;
}

cyber 10.08.2012 22:23

Цитата:

Сообщение от Deff (Сообщение 196385)
Ти при зуме сейчас не правишь координаты у .map a, которые и смещают твои точки (при зуме ведь их координаты остаюца старыми или выставляй им смещение в %
И стиль чуть поправь

.map a {
position:absolute;
display:inline:block;
}

т.е старые?
они меняются при увеличение, и не совсем понял про %

Deff 10.08.2012 22:25

cyber,
Если left и top изначально пересчитать к размерам wrapper - то можно ставить left:10%; top:13%;(к примеру) и забыть про правку при зумме
но это достоверно для

.map a {
position:absolute;
display:inline:block;
}

Deff 10.08.2012 22:32

cyber,
Ксать заметил - что у тьву зумм на пойнтеры - в обратную строну - при уменьшениии карты - вроде как смещение увеличиваешь (на zoom нужно умножать координату (и при увеличении - тоже - хотя это при увеличении правильно
Мож ты где абсолютное значение берешь ?

Заметь - при увеличении карты - точки прилеплены

cyber 10.08.2012 22:34

хм.. с % идеально, если подойдет так и сотавлю

П.с самое смешно что я на сам скрипт потратил 4 часа , с точками сижу 3й день=)
спасибо что помогаешь =)

cyber 10.08.2012 22:35

Цитата:

Сообщение от Deff (Сообщение 196396)
cyber,
Ксать заметил - что у тьву зумм на пойнтеры - в обратную строну - при уменьшениии карты - вроде как смещение увеличиваешь (на zoom нужно умножать координату (и при увеличении - тоже - хотя это при увеличении правильно
Мож ты где абсолютное значение берешь ?

Заметь - при увеличении карты - точки прилеплены

я хотел хоть увеличение сначала сделать=)

cyber 10.08.2012 22:45

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

cyber 10.08.2012 22:49

кстати мой вариант теперь тоже работает http://javascript.ru/forum/events/30...tml#post196383

Deff 10.08.2012 22:58

Цитата:

Сообщение от cyber
кстати мой вариант теперь тоже работает проблемы с jQuery и оптимизацией

cyber, Да заметил

- Ксать чо те просто не вычислять отношение текущей ширины wrapper к самой изначальной исходной - это и будет реальный zoom - на который и нужно домножить координаты точек ? (не нун уменьшение - увеличение тестить

cyber 10.08.2012 23:00

нет теперь нужно , я не занимался уменьшение пока не закончил увелечение , а теперь буду что то думать с уменьшением

Deff 10.08.2012 23:03

cyber,
дык выкинуть проще - те нун ток отношение найти, - всё одно ти точки делаешь после зума карты - воть там, в зуме карты и определить отношение

cyber 10.08.2012 23:17

хм, не работает, делал так

текущий размер / исходный размер

Deff 10.08.2012 23:24

cyber,
Исходный - это статический самый начальный - он константа

вот бьл изначально 100px

текущий стал 50 = zoom у тебя 0.5

текущий стал 70 zoom у тебя 0.7

текущий стал 200 zoom у тебя 2.0 координаты точек изменяцо в помножая на zoom тоже начальные исходные координаты
Которые при ширине 100

cyber 10.08.2012 23:28

пока в качестве константы использую размеры заданные в стилях
.map .wrapper{
 
 width:1600px;
height:1000px;	
cursor: move;
	
	}

Deff 10.08.2012 23:30

Цитата:

Сообщение от cyber
пока в качестве константы использую размеры заданные в стилях

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

cyber 10.08.2012 23:36

да но вот только не правильно работает

последняя функция в файле zoom.js

Deff 10.08.2012 23:41

Цитата:

Сообщение от cyber
да но вот только не правильно работает

Ти чот опять там со скриптами - выведи zoom при уменьшении -увеличении (*текущую ширину деленную на изначальную

cyber 10.08.2012 23:43

вроде правильно

Deff 10.08.2012 23:47

cyber,
Мне кажецо что ты и top1 - правишь выведи как произведение двух чисел
top1должен быть постоянным top1 это начальное смещение по высоте без зума

cyber 10.08.2012 23:52

если ты про константу то править ее некак
function resize_zoom () {
	
var  top, left, posTop, posLeft;	
    
	posTop = parseInt($(this).css('top'));
	posLeft = parseInt($(this).css('left'));
	
	/*
	get(Height/Width) размер картинки после увлечения
	step.height на сколько увеличить высоту
	*/

	 top = getHeight / 1000;
	 left = getWidth / 1600;
  alert(getWidth)
 // alert('left='+left+' top=' +top)
 
 return {
	top: Math.round(top * posTop), 
	left: Math.round(left * posLeft), 
	point: this
	 }		 
	
	}

она пока числом задана

Deff 10.08.2012 23:58

Цитата:

Сообщение от cyber
 top = getHeight / 1000;

Неть я говорю - ты же множишь позицию пойнтера на зумм - дык выведи в произведении что ты множишь на zoom - если множимое постоянное - занчит ошибка в зуме

top: Math.round(top * posTop), - воть это - ерунда
==========================================
у тьву есть начальная позиция - вне функции!

вот вынеси эту штуку
posTop = parseInt($(this).css('top'));
posLeft = parseInt($(this).css('left'));

за пределы функции! для каждой точки (там не $(this). а реальный селектор поставь (у тьву эта позиция сейчас -не константа

cyber 10.08.2012 23:59

я кажется понял что ты имееш в виду, начальные значение (top/left) нужно умножать на зум и меняется только зум?

Deff 11.08.2012 00:05

Цитата:

Сообщение от cyber
нужно умножать на зум и меняется только зум?

ДА!!

cyber 11.08.2012 00:42

УРА работает, http://cyberua.16mb.com/files/zoom.html
СПАСИБО!!!

Deff 11.08.2012 00:55

cyber,
:) Дык если перевести left и top в % изначально - при установке пойнтеров - то и этих операций не нужно (проценты допускают дробную часть) типо
87.69%

cyber 11.08.2012 01:05

Цитата:

Сообщение от Deff (Сообщение 196483)
cyber,
:) Дык если перевести left и top в % изначально - при установке пойнтеров - то и этих операций не нужно (проценты допускают дробную часть) типо
87.69%

можно конечно, но нужно в пикселях :)
и еще раз спасибо=)


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