Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер шрифта в браузере и координаты Canvas, съезжают координаты 
V
    Опции темы
kuksha
Дата 13.9.2014, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Есть страничка с картой, сделанной на Canvas:
http://kosmoved.ru/nebo_segodnya_geo.php
При изменении пользователем размера шрифта в настройках обозревателей, канва понятное дело тоже съезжает вверх или вниз, вслед за текстом.
Это плохо тем, что у меня при перемещении курсора мыши внутри канвы, появляются всплывающие подсказки, привязанные к координатам левого верхнего угла окна обозревателя. 
текущие координаты мыши определяются так: 
Код

  var Xi = event.clientX;
  var Yi = event.clientY;

Соответственно, если канва съехала, то и координаты объектов под мышью уже не соответствуют ранее вычисленным.

Догадки решений:
или запретить менять размер шрифта в браузере, что видимо невыполнимо
или определять какой размер шрифта выставлен и как-то вычислить смещение канвы.... 
или жёстко, в пикселях, задать координаты канваса карты, что наверное маловозможно, да и не очень правильно
или (видимо самое правильное?) научиться определять координаты мыши внутри канваса 

Как всё это делать я не знаю...

Помогите пожалуйста.
PM MAIL   Вверх
AVA12
Дата 14.9.2014, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 2
Всего: 4



Цитата
при перемещении курсора мыши внутри канвы, появляются всплывающие подсказки, привязанные к координатам левого верхнего угла окна обозревателя

Это изначально странное решение. У меня лично координаты активных зон изначально неверные.

Правильное (и очевидное) решение - определять координаты курсора внутри канвы и размещать подсказки поверх нее же, а не поверх всей страницы. Для этого:
 - создать позиционированный блок-обертку для канвы с размерами, совпадающими с размерами канвы;
 - внутри этой обертки разместить канву;
 - после канвы внутри обертки разместить абсолютно позиционированный блок с подсказкой;
 - обработчики событий мыши повесить на саму канву (или на обертку), координаты курсора относительно обертки (и канвы) лежат в свойствах offsetX и offsetY объекта события.

Верстка примерно такая:
Код

<div id="canvas-frame" style="position:relative;width:650px;height:650px;overflow:visible">
<canvas width="650" height="650"></canvas>
<div id="obj-info" style="position:absolute;width:160px;height:210px"></div>
</div>

PM ICQ Jabber   Вверх
kuksha
Дата 14.9.2014, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Ну, почти так всё и есть, кроме offsetX и offsetY. В том числе обработчик событий уже на канве (на мой взгляд чайника).
Не понял насчёт обёртки, ну ничего - просто послушаюсь.

Странно, я точно пробовал offsetX и offsetY в самом начале, но где-то не справился - точно был глюк (то ли с прокруткой связано было, то ли ещё с чем-то) и пришлось перейти на event.clientX/Y...

Сейчас буду разбираться. Спасибо!
PM MAIL   Вверх
kuksha
Дата 14.9.2014, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Отлично! Всё получилось!
Спасибо ещё раз  smile 

Плюсануть хотел, да постов не хватает  smile 

Это сообщение отредактировал(а) kuksha - 14.9.2014, 21:33
PM MAIL   Вверх
kuksha
Дата 4.10.2014, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Авария!
FireFox похоже не поддерживает свойства offsetX и offsetY.
В IE тоже что-то поломалось, хотя offsetX и offsetY - это вроде детище IE... 

Надо срочно заплатку поставить - страничка не работает, народ жалуется.
Помогите!


Это сообщение отредактировал(а) kuksha - 4.10.2014, 14:48
PM MAIL   Вверх
AVA12
Дата 4.10.2014, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 2
Всего: 4



Странно. Какие-то древние версии?

Можно попробовать свойства layerX и layerY, если offset* не определены.
PM ICQ Jabber   Вверх
kuksha
Дата 5.10.2014, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Никаких древностей. 
История этой косности FireFox давно тянется... Я потом вспомнил, что поэтому и не стал с offsetX и offsetY связываться..
В итоге вчера сделал такую заплатку: 
Код

if (typeof event.offsetX != 'undefined' && typeof event.offsetY != 'undefined') {  
    X0= event.offsetX;
    Y0= event.offsetY;
}
else if (event.target) {        
    var elem = event.target;
X0=0;
Y0=0;
    do {                        
        X0 += elem.offsetLeft;
        Y0 += elem.offsetTop;
    } while (elem = elem.offsetParent);
    X0 = (window.pageXOffset + event.clientX) - X0;
    Y0 = (window.pageYOffset + event.clientY) - Y0;
}


Это сообщение отредактировал(а) Aliance - 23.10.2014, 13:48
PM MAIL   Вверх
Aliance
Дата 23.10.2014, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



kuksha, пожалуйста, используйте правильную кнопку код - там есть выпадающий список, где можно выбрать язык. У вас везде был html (он по умолчанию), тогда как у вас код везде - чистый js. Я отредактировал, просто на будущее. И еще, если вы получили ответ на свой вопрос - вверху темы есть кнопка "Пометить как решённый", не забывайте ее нажимать. Я сейчас это сделал за вас.

PS: плюс участнику AVA12 я за вас поставил.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0709 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.