Положение фрейма в JavaScript

У меня есть веб-страница на основе фреймов с 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. Это событие должно открывать всплывающее окно 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» - это не те переменные, которые я могу использовать, потому что они не относятся к главной странице.

Любые идеи?

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

some 29.12.2008 11:20

Кроме того, поскольку вы используете только window.event в своем mouseDown, он будет работать только в IE и, возможно, в Opera.

some 29.12.2008 11:24

Как я уже писал в своем вопросе, я уже знаю проблему "window.even" - так что это всего лишь тестовый код, ничего, наконец ...

Robert Wismet 29.12.2008 17:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
3 700
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

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

window.createPopup(...)

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

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

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

Хорошая вещь, но это не решает проблемы: в какой позиции мне открывать всплывающее окно?

Robert Wismet 02.01.2009 11:28

Я добавил информацию о методе показа и относительном позиционировании. Это помогает?

qbeuek 03.01.2009 12:59
Ответ принят как подходящий

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

У использования нового окна вообще и модального есть много недостатков ...

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

Другие вопросы по теме