5 / 5 / 2
Регистрация: 19.08.2012
Сообщений: 79

фиксация точек на картинке при зуме

30.08.2012, 22:01. Показов 2807. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сделал скрипт карты с drag and drop и зумом, а теперь нужно зафиксировать точки на ней я пытался сделать так
текущая позиция * зум
но при наростание зума точки потихоньку уежают=(
как можно их зафиксировать что бы они не уежали?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2012, 22:01
Ответы с готовыми решениями:

При зуме фигура перекрывается границами виджета
Здравствуйте. Название темы звучит как абсурд. Так ведь и должно быть при достаточно высоком увеличении фигуры. Но есть одно но -...

Android: баг с отображанием пространства под страницей при минимальном зуме
Всем доброго утречка :) При тестировании сайта (точнее, своего скина под Drupal 7) на разных устройствах возникла проблема: на...

Как сделать, чтобы структура страницы и её контент не изменяли своего местоположения при зуме в окне браузера?
Доброго времени суток, форумчане! При вёрстке сайта столкнулся с такой проблемой: при изменении зума браузера блоки с размещённым внутри...

7
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
30.08.2012, 23:01
__proto__, всё очень просто - тут даже не математика, а простейшая арифметика.

Пропорции в школе проходили?
Вот они здесь и "рулят".



Вам надо запоминать не y, а соотношение y / H
И надо запоминать не x, а соотношение x / W

Тогда новые y1 и x1 у вас легко получатся из этих соотношений:

y1 = (y / H) * H1
x1 = (x / W) * W1
0
5 / 5 / 2
Регистрация: 19.08.2012
Сообщений: 79
30.08.2012, 23:28  [ТС]
я пробывал этот вариант, смещается на такое же расстояние пиксель в пиксель

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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'  
     }); 
     
});
        
    
}
на картинке кругом обозначенно место где должна быть точка
Миниатюры
фиксация точек на картинке при зуме  
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
30.08.2012, 23:37
__proto__, увы, "костылями" никогда не пользовался, их тарабарского "языка" не знаю, помочь не смогу.
0
5 / 5 / 2
Регистрация: 19.08.2012
Сообщений: 79
31.08.2012, 21:58  [ТС]
если честно сам ненавижу эту хренатень, писал всегда на чистом js но этот скрипт друг попросил на jquery, за то время что пишу на нем раз 5 уже проклял его=)
старый добрый js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
      var points = [];// массив с точками
      var point;
      
      for (var i = points.length;i--;) {
      
      point = points[i];
      var left = parseInt(point.style.left);
      var top = parseInt(point.style.top);
      
  if (zoom) {
          
   left *= width / zooming.offsetWidth;
   top *= height / zooming.offsetHeight;
 
       } else {
         
    left /= zooming.offsetWidth / width;
    top /= zooming.offsetHeight / height;  
      
    }
    
     point.style.left = left +'px';
     point.style.top = top +'px';  
      
     }
HTML5
1
2
3
4
5
6
<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>
Добавлено через 41 минуту
вот пытался понять где то я сделал лишний отступ или нет, написал тестовый пример
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML>
<html>
  <head> 
  <style>
    #wrapper {
      position:absolute;
    }
    
    #wrapper > a{
      top:50px;
      left:70px;
      width:30px;
      height:30px;
      background-color:red;
      position:absolute;
      border-radius:50%;
    
    }
    
    </style>
  </head>
  <body>
 
<div id='wrapper'> 
 <img src='http://worldofwarplanes.ru/dcont/fb/media/contest_24_02_2012/graf_grob.jpg'> 
  <a href='https://www.google.com.ua/'></a>
  <div>    
    
    <a href='#' onclick='newSize()'>size</a> 
    <script>
 
      function newSize() {
        var zoomL = 1000 / 640;
        var zoomT = 1000 / 480;
        
        _('img').style.width = 1000+'px';
        _('img').style.height = 1000+'px';
      
        _('a').style.left = 70 * zoomL+'px';
        _('a').style.top = 50 * zoomT+'px';
      }
     
           function _(selector) {
           return document.querySelectorAll(selector)[0];
             
           }
    </script>
 
  </body>
</html>
тут можно запустить http://learn.javascript.ru/play/Kpxci

Добавлено через 21 час 21 минуту
Проблема не в том как я расчитую, а в самих точка..
чем меньше точка тем меньше она уежает..
как решить не могу придумать, уже фиг знает сколько времени убил.
Может кто то подскажит?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
01.09.2012, 00:25
В начальной школе учились вы плохо... пропорции, увы, не освоили.

См. http://codecenter.awardspace.com/zoomtest0109.html
0
5 / 5 / 2
Регистрация: 19.08.2012
Сообщений: 79
01.09.2012, 01:32  [ТС]
в школе я учился просто ужасно.
но все пробелы в знаниях я потом по закрывал.
так что смотрите сами
исходный размер 1600
картинка до зума(исходный размер)


Добавлено через 1 минуту
ваш пример натолкнул меня на мысль, щас проверю ..
0
5 / 5 / 2
Регистрация: 19.08.2012
Сообщений: 79
01.09.2012, 02:20  [ТС]
а проблема то была не в расчетах новой позиции а в том что координаты точки учитываются с учетом ее масштабирования
Миниатюры
фиксация точек на картинке при зуме  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2012, 02:20
Помогаю со студенческими работами здесь

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

Фиксация меню при прокрутке
Всем привет! Ребята подскажите, как сделать так что бы при прокрутке верхнее меню было зафиксировано! Вот сам код: &lt;!DOCTYPE html...

Фиксация блока при скроллинге
Как мне добиться такого результата? Есть 2 блока. Первый выше, другой короче. Теперь когда я скроллю вниз то второй блок фиксируется,...

Фиксация элементов формы при скролинге
Здравствуйте. Допустим в Userform есть несколько кнопок и скролбар. Мне нужно чтобы некоторые кнопки при скролинге не двигались со своего...

Фиксация меню при прокрутке, где ошибка?
Здравствуйте! emk34.ru сайт выполнен на Joomla, идея следующая - зафиксировать меню при прокрутке, и это работает! Когда я сделал этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru