проблемы с jQuery и оптимизацией
вот тут http://cyberua.16mb.com/files/zoom.html есть скрипт (что то типо мини карты ) но он ужасно виснит не понятно почему.
в мозиле вылетает такое сообщение Цитата:
|
cyber,
что-то да есть. Чем больше двигаю, тем больше лаги. Может где-то зациклена функция??? Потому что сначало все ок, а уж потом плохенько. |
Цитата:
смотрите сами
function init_drag (e) {
move = true;
var margin = getMargin();
downX = e.pageX + Math.abs(margin.left) - coord_elem.left;
downY = e.pageY + Math.abs(margin.top) - coord_elem.top;
$(document).on('mousemove', wrapper);
$(document).on('mouseup', MouseUp);
}
function wrapper(e) {
if (move) setTimeout(function (){
MouseMove(e);
},30);
}
function MouseMove (e) {
var left, top;
var pgX = e.pageX - coord_elem.left;
var pgY = e.pageY - coord_elem.top;
left = - (downX - pgX);
left = Math.min(left, 0);
left = Math.max(left, - (img.width() - elem.width()));
top = -(downY - pgY);
top = Math.min(top, 0);
top = Math.max(top, -(img.height() - elem.height()));
img.css({
'margin-top': top+ 'px',
'margin-left':left + 'px'
});
}
function MouseUp () {
move = false;
$(document).unbind('mousemove', wrapper);
$(document).on('mouseup', MouseUp);
}
function getMargin () {
var top = parseInt(img[0].style.marginTop);
var left = parseInt(img[0].style.marginLeft);
return {top: top, left: left};
}
|
хм интересно, у меня была не большая ошибка
в место
$(document).unbind('mouseup', MouseUp);
я написал
$(document).on('mouseup', MouseUp);
и теперь вроде все норм, но почему из за такой маленькой ошибки так его плющило? |
cyber,
Гы .unbind отключает обработчик - .on('mouseup', MouseUp) - ставит новый обработчик |
Цитата:
кстати а как можно оптимизировать что бы было меньши тормозов? |
cyber,
Ксать я не наю вот это верно ? $(document).on('mousemove', wrapper); (просто я со старыми версиями, где оn нет Если обработчик подключается bind то отключается unbind Про on - не знаю |
Цитата:
|
по этой ссылке http://gmap.nurtext.de/examples.html есть мини гугл карта (4я с верху), при перемещение карты позиция точек не меняется но почему то они остаются на месте, как это сделано не могу понять
|
Цитата:
|
cyber,
Я завтра гляну - засыпаю уже |
Цитата:
|
кажется понял :
у гугла карта разбита на блоки и когда я двигаю я двигаю общий контейнер , так как у точки позиция относительно контейнера поэтому она и не двигается |
Цитата:
масштабирование не помогло ? При оnscroll нужно менять не только масштаб у карты но и так же само масштаб у координат <div class="point_on_map"></div> |
Цитата:
и мне было интересно почему у них точки при перемещение не смещаются.. |
cyber,
а где у Вас добавления смещения при drag and drop к <div class="point_on_map"></div> ? |
Цитата:
и я вроде разобрался Цитата:
|
cyber,
Ну сделайте контейнер с картой - postion relative(или абсолюте) - тогда - если точки у Вас внутри контейнера - то будет аналогично вместе с картой |
Цитата:
|
блин опять что то не так
при увеличение все работает, но при уменьшение не правильно
function resize_zoom (i) {
var point, top, left, posLeft, posTop;
point = points.eq(i);
posLeft = point.offset().left - coord_elem.left;//текущая позиция точки
posTop = point.offset().top - coord_elem.top;//текущая позиция точки
top = (getHeight / (getHeight - step.height))/*
get(Height/Width) размер картинки после увлечения
step.height на сколько увеличить высоту
*/
left = (getWidth / (getWidth - step.width));
if (!zoom) {// если zoom false уменьшаем
top = (getHeight / (getHeight + step.height));
left = (getWidth / (getWidth + step.width));
}
return {
top: Math.round(top * posTop),
left: Math.round(left * posLeft),
point: point
}
}
}
|
Цитата:
|
я по той ссылке просто код не поменял=)
|
|
Если картинку обернуть вместе с пойнтерами враппером - смещать пойнтеры не нужно ток ты им исходную позицию задавай не top left
а margin-top и margin-left и они должны стоять перед картинкой карты (ксать с margin мож и без обёртки пройдёт |
Цитата:
|
Цитата:
|
cyber,
Попробуйте отдохнуть - имхо вы замучали код и себя - лучше свежая голова! |
Цитата:
просто у меня уже все готово нужно просто добавить еще 1 готовый внешний файл и до делать позиционирование точек при уменьшение |
короче с точками проблемы, ездят как хотят(не только при уменьшение) ,завтра разберусь
|
что я не так делаю :
-что бы получить зум при увеличении я делаю так : текущий размер/ предыдущий размер; -что бы получить зум при уменьшение я делаю так : предыдущий размер / текущий размер |
cyber,
Неть - формула везде одна и таж текущий размер/ предыдущий размер; |
Deff, ваш комментарий http://javascript.ru/forum/events/30...tml#post195321
|
Цитата:
|
cyber,
Вообщем норма - ток неясно нафига ти img { width:1600px; height:900px; cursor: move; -webkit-transition:all 2s ease; -moz-transition:all 2s ease; -o-transition:all 2s ease; transition:all 2s ease; } Красное на карту добавил ?? или время сократи до 0.2 |
Цитата:
т.е норма? точки смещаются с исходной позиции - это не норм. |
cyber,
В Опере норма - ксать убери красное - имхо - лучше ( тормозов не вижу нигде) А в Мозилле и Гугле имхо наверно или отсекаешь дробную часть(там оффсеты дробные) - из-за этого погрешность либо маргин и паддинги где-то лишние потестируй там маргин и паддинг алертом при зуме Воть в JQ высота - ширина http://jquery-docs.ru/CSS/height/ http://jquery-docs.ru/CSS/height/#val http://jquery-docs.ru/CSS/width/ http://jquery-docs.ru/CSS/width/#val |
Цитата:
в опере при уменьшение точки летают как "птицы" (ну меня точно) |
а насчет высоты и ширины я ее так и получаю
var getWidth = img.width(); var getHeight = img.height(); |
а какая разница между
img.height(getHeight); img.width(getWidth); и
img.css({
width : getWidth +'px',
height: getHeight + 'px',
});
|
cyber,
Забей - а то я тьву еще больше запутаю |
| Часовой пояс GMT +3, время: 20:16. |