Положение кадра в JavaScript - PullRequest
1 голос
/ 29 декабря 2008

У меня есть фрейм-страница с 3 фреймами. Верхний слой, навигация слева и рамка контента внизу справа.

Теперь я хочу показать всплывающее меню, когда пользователь щелкает правой кнопкой мыши фрейм с контентом. Поскольку div-контейнер не может выходить за рамки, моя идея заключалась в том, чтобы поместить весь фрейм-страницу в новый iframe. На этой странице у меня может быть второй iframe, который является моим всплывающим меню.

Так что теперь у меня есть этот макет:

<html> (start-page)
  <iframe  (real content)
    <frameset 
      top-frame
      navigation-frame
      content-frame
    >
  >
  <iframe> (my popup-menu, positioned absolutelly and hidden by default)
</html>

В моем фрейме содержимого у меня есть событие onmouseover, назначенное тегу body. Это событие должно открыть popup-iframe в текущей позиции мыши. И именно здесь моя проблема: как получить координаты мыши относительно верхнего сайта (стартовая страница в моем проекте)?

В настоящее время у меня есть эта функция mouseDown (прямо сейчас работает только в IE - но ее работа в FF & Co не должна быть проблемой ...)

function mouseDown(e)
{
  if (window.event.button === 2 || window.event.which === 3) 
  {
    top.popupFrame.style.left = event.screenX + "px";
    top.popupFrame.style.top = event.screenY + "px";
    top.popupFrame.style.display = "";
    return false;
  }    
}

Как видите, переменные "event.screenX" и "screenY" - это не те переменные, которые я могу использовать, потому что они не относятся к главной странице.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 30 декабря 2008

Вы говорите, что это корпоративное приложение - вам нужно поддерживать все основные браузеры или достаточно IE?

Я спрашиваю об этом, потому что в IE есть функция, которая работает именно так, как вам нужно:

window.createPopup(...)

http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx

Всплывающее окно будет видно даже за пределами окна браузера! : -)

Чтобы показать это, используйте метод .show (...), который принимает аргументы позиции и размера (подробности см. В MSDN). Приятно то, что вы также можете передать ссылку на элемент страницы, относительно которого расположена позиция, так что вы можете легко расположить всплывающее окно относительно определенного элемента страницы, определенного кадра, определенного окна браузера или даже относительно рабочего стола. .

1 голос
/ 04 января 2009

Если вы планируете только поддерживать IE - вы можете попробовать использовать новое модальное окно, вызвав window.showModalDialog. Вы можете разместить новое окно в любом месте экрана.

Есть много недостатков в использовании нового окна в целом, и модальное при этом ...

Кстати - FF 3 и выше поддерживает window.showModalDialog

0 голосов
/ 30 декабря 2008

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

Я знаю, что это может быть не то, что вы хотите услышать, но у фреймов есть много недостатков, помимо проблемы с всплывающим меню, с которой вы сейчас сталкиваетесь. Например:

  • Кадры трудно или невозможно правильно добавить в закладки, так как обычно набор фреймов является единственной страницей, видимой в адресе.
  • Очень просто вырваться из набора фреймов, загрузив ссылку в новом окне браузера. Это означает, что пользователь может потерять навигацию или потеряться.
  • Они не изящно разлагаются на мобильных устройствах и только текстовых браузерах. Большим плюсом для CSS-макетов является то, что даже без включенных стилей они все еще пригодны для использования.
...