Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.02.2015, 10:39
Новичок на форуме
Отправить личное сообщение для AlinaBeawer Посмотреть профиль Найти все сообщения от AlinaBeawer
 
Регистрация: 20.02.2015
Сообщений: 9

Управление позицией всплывающего окна с разным объемом информации
Здравствуйте! Я не разбираюсь в JavaScript, прошу помощи!

Есть карта схема зданий. фоном - файл png с картой. Поверх контуры зданий (по координатам svg с помощью библиотеки Raphael отрисованы path). При наведении на контур он подсвечивается, при клике на контур - всплывает окно, с информацией по фирме распологающейся в здании. Когда фирма одна - все ок. Когда их больше 10 - возникает проблема - информация во всплывающем окне - уходит направо, за границы экрана. Позиция всплывающего окна задана просто:
.css({
				
         left: point.x+(point.width/2)-50,
	 top: point.y+(point.height/2)-20

т.е. окно просто сдвигается направо от координаты клика. Как я понимаю, надо задать какое то условие, которое в зависимости от размера всплывающего окна (1 фирма или 10) проверяет выходит ли окно за границы карты и если да - то сдвигать его не направо, а налево.

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

Вот моя карта в песочнице: http://jsbin.com/mimowi/2/watch?css,js,output
там можно глянуть код js. он совсем маленький
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2015, 11:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

if (left + modalWidth > windowWidth) // если левая точка + ширина окошка больше ширины экрана
    left -= modalWidth; // сдвигаем левую точку влево на ширину окошка


Ширину можно получить через функцию width()
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2015, 11:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Кстати, что если ширина экрана настолько мала, что окошко не влезет ни слева ни справа?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2015, 11:41
Новичок на форуме
Отправить личное сообщение для AlinaBeawer Посмотреть профиль Найти все сообщения от AlinaBeawer
 
Регистрация: 20.02.2015
Сообщений: 9

может урок какой есть, где посмотреть, как получить ширину и в какое место кода вставлять условие?

Я полный чайник(( в моем коде ( в сети найдено) нет modalWidth. окно задано как
var point = this.getBBox(0);
это одно и то же?
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2015, 11:44
Новичок на форуме
Отправить личное сообщение для AlinaBeawer Посмотреть профиль Найти все сообщения от AlinaBeawer
 
Регистрация: 20.02.2015
Сообщений: 9

ширина карты 920px. то, что не попадает в эту ширину уходит вниз за пределы карты - это меня устраивает. не устраивает, когда текст во всплывающем окне уходит направо или налево за пределы карты 920px - его вообще не видно становится
Ответить с цитированием
  #6 (permalink)  
Старый 20.02.2015, 11:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от AlinaBeawer
как получить ширину
Если через библиотеку jQuery, то через $(element).width() , писал ведь уже. В переменной element должен находиться DOM-элемент окошка. Или css-селектор.
Сообщение от AlinaBeawer
нет modalWidth
Значит нужно ее создать. И записать в нее ширину окошка.
Сообщение от AlinaBeawer
var point = this.getBBox(0);
это одно и то же?
point переводится как "точка". Фиг знает че там у вас за точка такая. Хотя get box переводится как "получить ящик". Непонятно почему вы для получения "точки" просите "ящик"

Сообщение от AlinaBeawer
может урок какой есть ... в какое место кода вставлять условие?
Не думаю что вы найдете урок как вставить условие в ВАШ код. Или он настолько популярен что его используют в уроках?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 20.02.2015, 11:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если jQuery не используется, то ширину можно получить через свойство element.offsetWidth. С window чуть сложнее - там нужен костыль для IE старых.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 20.02.2015, 12:13
Новичок на форуме
Отправить личное сообщение для AlinaBeawer Посмотреть профиль Найти все сообщения от AlinaBeawer
 
Регистрация: 20.02.2015
Сообщений: 9

ох)) щаз буду пробовать методом тыка. понимаю, что код за меня никто не напишет, спасибо за попытку объяснить чайнику!

библиотека подключается qvery. а почему автор урока для получения точки просит ящик я и сама в непонятках)) щаз буду мозгами скрипеть как вставить это условие и куда в коде.
Ответить с цитированием
  #9 (permalink)  
Старый 20.02.2015, 13:15
Новичок на форуме
Отправить личное сообщение для AlinaBeawer Посмотреть профиль Найти все сообщения от AlinaBeawer
 
Регистрация: 20.02.2015
Сообщений: 9

вот что у меня получилось. правильно?
$('.point').width(); /*получаем ширину всплывающего окошка*/
       if (point.x + point.width > 920);  /* если левая точка + ширина окошка больше ширины карты*/
        left -= point.width;/*сдвигаем левую точку влево на ширину окошка*/
Ответить с цитированием
  #10 (permalink)  
Старый 20.02.2015, 13:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Почти. Только в left сначала надо записать начальное значение:
var left = point.x+(point.width/2)-50;

А потом этот left передать в css()

Ну и $('.point').width() - вообще бессмыслица. Эта функция возвращает значение, которое нужно записать в переменную или использовать сразу. А тупо вызов ничего не дает - результат улетает в космос.
Кроме того, видимо point.width - это и есть уже вычисленная ширина окошка.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прокрутка всплывающего окна greatilya (X)HTML/CSS 15 18.06.2014 13:45
Определить адрес всплывающего окна maks1408 Events/DOM/Window 5 05.05.2014 19:39
По поводу всплывающего окна Popap tiksi jQuery 0 31.05.2013 04:22
Позиционирование всплывающего окна debugx jQuery 5 24.05.2011 15:47
script для всплывающего окна?????! BIZNES123 Элементы интерфейса 3 04.12.2009 10:43