Логика скрытия элементов

У меня дилемма в логике этого конкретного вопроса. Простите меня, если это вопрос новичка, но я бы предпочел, чтобы он был твердым.

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

С уважением,

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
312
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Это один из способов сделать это.

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

JQuery облегчит вам эту задачу.

Я давно этого не делал, но простое решение - добавить событие щелчка вверху дерева DOM, которое закроет открытый элемент. Вот пример на псевдо-javascript:

document.body.onclick = function() { 
   element.style.display = "none";
}

Если вам нужно сложное поведение внутри «показанного» элемента, убедитесь, что вы предотвращаете распространение необходимых событий вверх по дереву DOM.

element.onclick = function(e) {
  e.stopPropagation()
}

Дешевый способ сделать это потенциально - привязать обработчик событий к событию «(on) blur» интерактивного элемента и / или его цели. Если ваш дизайн позволяет.

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

Что касается того, как это делается, методы различаются. Существует множество решений Javascript, в основном аналогичных уже описанным, но меню также можно создавать исключительно с помощью CSS - обычно с использованием свойства дисплей: нет;, хотя вы также можете делать такие вещи, как установка / снятие отрицательного поля, чтобы элемент был переехал "прочь и на страницу".

Чтобы использовать в качестве примера некоторые из моих собственных работ:

Шаг 1 - используйте библиотеку javascript, чтобы код был максимально кроссбраузерным - в противном случае вам придется обслуживать две разные модели событий между браузерами на основе Internet Explorer и gecko / webkit. JQuery, Mootools, YUI - все они справятся с этим за вас - их гораздо больше, но эти 3 являются моими любимыми и хорошо документированы.

Шаг 2 - вы, вероятно, захотите реализовать для этого clickshield - по сути, элемент dom на уровне блока, который абсолютно позиционируется по всей вашей странице с более высоким z-индексом, чем остальная часть страницы. прикрепите к нему событие щелчка, и вы сможете выполнить свою логику для скрытия элементов на странице. В clickshield код javascript может легко расширить его до ширины-высоты рендеринга DOM вашей страницы, используя методы любой из вышеупомянутых библиотек javascript.

Ответ принят как подходящий
$('#target').bind('click', function(event)
{
    var $element = $('#element');
    $element.show();

    $(document).one('click', function()
    {
       $element.hide();
    });

    // If you don't stop the event, it will bubble up to the document
    // and trigger the click event we just bound. 
    // This will hide the element right now just after showing it, 
    // we don't want that.
    event.stopPropagation();
}

Вы должны иметь в виду, что событие Javascript перемещается вверх и вниз по всему дереву при запуске. Таким образом, вы можете привязать прослушиватели событий к любому родительскому элементу, если хотите прослушивать событие на многих элементах.

Это называется делегированием событий.

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