Определение положения щелчка мыши на изображении на экранах разных размеров - JS/Jquery
Я задавал этот вопрос раньше, и ответы сказали мне, что я знал, что мне нужно было сделать, но не привели пример, поэтому я еще не нашел решение.
У меня есть начальный div под названием "контейнер", который является height:100% width:100%
изображение карты Оклахомы. Идея состоит в том, что когда пользователь щелкает определенную часть карты (для этого примера - ручку с панорамированием), div переключается на div, который является изображением с панорамированием. Я определяю, где пользователь щелкает мышью, зная расположение мыши по пикселям при нажатии.
Проблема в том, что значения пикселей различны для экранов разных размеров. Мне сказали, что для того, чтобы масштабировать мои расчеты в зависимости от того, где пользователь нажимает в зависимости от размера экрана, мне необходимо:
масштабируйте каждое значение, прежде чем сравнивать его. Умножьте каждый x на свою каноническую ширину, разделите на фактическую ширину и сделайте то же самое с y и высотой.
Меня смущает "умножить каждый х на свою каноническую ширину и разделить на фактическую ширину". Я пошел вперед и попытался все равно масштабировать. Я обнаружил, что первый край ручки находится на 3,1% от левой стороны экрана, а самый дальний - на 35,7% от левой стороны экрана. У меня есть следующий код:
$("#container").click(function(e)
{
var x = event.pageX;
var y = event.pageY;
// Variables for area of pan handle
/* These variables do not seem to work yet */
var xScale1 = 0.031*x;
var xScale2 = 0.357*x;
if(x >= xScale1 && x "less-than"= xScale2)
{
alert("You clicked the panhandle!");
}
}
При щелчке внутри горизонтальных рамок ручки должно появиться предупреждение, но ничего не происходит. Я заметил, что я не делю ни одно из моих значений на "фактическую ширину". Может ли кто-нибудь привести пример того, как "умножить каждый x на вашу каноническую ширину и разделить на фактическую ширину"?
2 ответа
Под канонической шириной они понимают "нормальную" ширину, которая в вашем случае является исходным размером изображения.
Предположим, что изображение, которое вы используете для карты, обычно имеет размер 1280 x 1600 пикселей (только ради аргументов), тогда ваша каноническая высота равна 1600 пикселей, а ваша каноническая ширина равна 1280 пикселей.
Итак, если я просматриваю изображение на экране размером 800 x 600 пикселей - то есть 800 пикселей в высоту и 600 пикселей в высоту - тогда мне нужно масштабировать изображение до 800 /1600 = 0,5 раза меньше по высоте и до 600 / 1250 = 0,48 раза меньше по ширине.
Точно так же, если я щелкну 400-й пиксель с левой стороны экрана и 200-й сверху на моем реальном экране, тогда я смогу получить свою "каноническую" позицию, разделив ранее установленные коэффициенты. поэтому (400, 200) => (800, 416,7).
Затем вы можете использовать эти канонизированные значения, чтобы посмотреть, какую часть вашего изображения они щелкнули.
Сказав все это, я бы не стал этого рекомендовать! Это идеальный случай для использования HTML-карт изображений: http://htmldog.com/reference/htmltags/map/. Проверьте это!
Надеюсь это поможет!
Я не знаю об этой конической вещи, но математически я вижу вашу проблему очень простым способом. Я предполагаю, что ваша карта - это изображение, а изображение имеет постоянный размер. Допустим, ваша карта 100х100. Если размер экрана 200х200, экран в 2 раза больше вашей карты.
xScreen = 2*xMap;
yScreen = 2*yMap;
Таким образом, все значения, используемые для экрана, в 2 раза больше, чем значения, используемые для реальной карты. Если пользователь щелкает 50,50 пикселей на экране 200x200, вы должны разделить его на 2 (пропорция), получая 25,25 на карте 100x100. Главное - найти пропорцию, разделив общий размер экрана и общий размер вашей карты. В этом случае:
xScreen/xMap = 2;//200/100 = 2;
yScreen/yMap = 2;//200/100 = 2;
Вот код, чтобы найти пропорцию:
var xScreen = screen.width;
var yScreen = screen.height;
var xProportion = xScreen/xSizeOfYourMap;
var yProportion = yScreen/ySizeOfYourMap;
$("#container").click(function(e)
{
var x1 = event.pageX;
var y1 = event.pageY;
var x2 = x1/xProportion;
var y2 = y1/yProportion;
alert("x of screen:"+x1+" - x of map:"+x2);
});
Теперь у вас есть значения щелчка на карте, которые вы можете рассчитать, если пользователь щелкнул нужную область. Для всех ваших расчетов числа должны проходить через пропорции.