Подтвердить что ты не робот

Как пересчитать координаты x, y на основе экранов

У меня есть приложение карты тепла и хранилище. Я храню x, y координаты щелчка, а также ширину и высоту видового экрана. Реальные данные для 2 кликов:

x,   y,   width, height
433, 343, 1257,  959
331, 823, 1257,  959

Проблема заключается в том, что когда я изменяю размер экрана на чувствительном сайте, отображаемые клики теперь отключены. Я нахожусь пустым в своих поисках, но есть ли формула или алгоритм для пересчета координат x и y для разных разрешений. Например, первый щелчок, если width идет от 1257 до 990, а height переходит от 959 в 400, как я пересчитываю x и y, чтобы они выстроились в строке то же место?

EDIT: Я добавил 2 базы данных в базу данных, width_percentage и height percent для хранения процента x от ширины и процента от высоты t28. Так что если x было 433, а ширина экрана составляла 1257, то x составляла 35% от левого края экрана. Затем я использовал ту же теорию для высоты и выполнил вычисления, но не масштабировал точку щелчка в том же месте, что и я, хотя проценты будут делать для масштабирования разрешений. Я тестирую это, нажимая на ширину полного разрешения 1257, а затем снова открывая ширину 900. См. Ниже код для отображения точек щелчка при более низком разрешении.

Ajax PHP

while ($row = mysql_fetch_array($results)) { 
  if( $_GET['w'] < $row['width'] ) {
    $xcorr = $row['width_percentage'] * $_GET['w'];
    $ycorr = $row['y']; 
  }
}

Здесь используется переменная $_GET, передающая ширину и высоту разрешения экрана при загрузке страницы. Затем он получает точки щелчка из базы данных как $results. Так как я только масштабирую ширину разрешения от 1257 до 900, я не учитывал высоту и тот же пиксель, что и начальный клик. Новая ширина я умножается на процент и задает точку с процентным запасом слева от экрана. Так как процент составляет 35% новая координата x становится 900 *.35 = 315px от левого края. Это не сработало, и я все еще почесываю голову, чтобы держать клик в том же месте для чувствительных сайтов.

4b9b3361

Ответ 1

Вы можете получить это через jquery:

$( window ).resize(function() {
  //ur code
});

Javascript

window.onresize = resize;

function resize()
{
 alert("resize event detected!");
}

если вы работаете на мобильных устройствах, используйте это также

$(window).on("orientationchange",function(event){
  alert("Orientation is: " + event.orientation);
});

Ответ 2

Вы пробовали эту математическую формулу для изменения диапазона числа?

FormulaX

FormulaY

А также вместо этого:

x,   y,   width, height
433, 343, 1257,  959
331, 823, 1257,  959

Вы можете сохранить его нормализованными между 0 и 1, чтобы он работал для любого width/height (рассчитывается путем деления каждого x на его width и каждый y на height):

x,     y
0.344, 0.357
0.263, 0.858

Тогда вам не нужно знать width/height, который вы использовали при их сохранении, и когда вы хотите перевести их на размер текущего экрана, вы просто умножаете каждый на текущий width/height

Ответ 3

Я думаю, что вы на правильном пути с процентами. Вы включаете смещение изображения карты. Интересно, работает ли ваш алгоритм, но визуальное представление кажется неправильным, потому что смещение изменяется в окне просмотра.

$(window).resize(function() {
    var offset = yourMap.offset();
    myLeft = offset.left();
    myTop = offset.top();
});

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

Ответ 4

Это то, что вы должны делать. Иногда событие изменения размера запускается при анализе документа. Рекомендуется помещать код внутри функции события onload. Функция изменения ориентации берется из ответа @Arun.

window.onload = function() {

  $(window).on("orientationchange", function(event) {
    alert("Orientation is: " + event.orientation);
  });

  window.onresize = function() {
    alert('window resized; recalculate');
  };

};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 5

для этого вам нужно сделать некоторые вычисления. Вот функция, которая вернет новое зелье x и y, основанное на высоте и ширине

function getNewX(xVlaue, oldWidth, newWidth){
   return xVlaue * newWidth / oldWidth;
}
newX = getNewX(10, 150, 100); // Use

Вы можете использовать общую функцию для вычисления высоты и ширины.

DEMO

Ответ 6

Весь вопрос в значительной степени зависит от страницы, на которой вы хотите ее использовать. Большинство страниц имеют центрированный блок и/или некоторые элементы для самостоятельного изменения размера (считаются "отзывчивыми" ). Если страница не очень отзывна, например. имея фиксированную ширину, вам легче работать. Если страница центрирована, вам может понадобиться сохранить X-позицию курсора относительно центра страницы. таким образом ширина окна не имеет значения. То же самое относится и к левым и правым выравниваемым страницам - в этом случае вы сохранили бы X-pos относительно левого или правого края окна соответственно.

На следующем изображении показана ориентация кликов по центру. Обратите внимание, что свойства x и y для клика не изменяются здесь, если вы изменяете размер окна.

объяснение ориентированной на центр позиции

Теперь к более общим методам

Если вы сохраните размеры окна, позиция курсора И прокрутка прокрутки на каждом клике, вы, скорее всего, сможете воспроизвести его вместе с макетом, но вам нужно будет воспроизвести его для каждый набор уникальных размеров. Если вы использовали трюк сверху, вы могли бы наложить все макеты и найти общий знаменатель. Например, если ваша страница сосредоточена в окне, имеет максимальную ширину, и вы сохранили X-pos относительно центра окна, вы можете наложить все клики, которые произошли в окнах, которые были по меньшей мере той ширины.

Однако вы можете сделать некоторые обманки и сохранить элементы с щелчком рядом с информацией, которую вы уже сохранили. Если вы также сохраните позицию клика относительно элемента, вы можете оценить эти данные примерно так: "кнопка отправки достаточно нажата в нижней правой части" или "люди часто нажимают на дальний конец этого раскрывающегося списка, а иногда и ошибочно -click на несколько пикселей".

Ответ 7

Попробуйте выполнить следующие действия:

1. Отступы и поля могут не масштабироваться. Используйте "* {padding: 0; margin: 0}" в конце вашей таблицы стилей и проверьте, исправляет ли это это.

2. Обеспечьте масштабирование внешних и внутренних (что означает все) элементов. Любой отдельный элемент, не имеющий масштабирования, сделает многие другие элементы неуместными. Это обычно происходит с текстовыми вводами. Используйте "* {border: solid 2}" в конце вашей таблицы стилей, чтобы визуально наблюдать эффект масштабирования для каждого элемента.

Я уверен, что ваша проблема будет решена.