Как вызвать событие щелчка мышью на нескольких элементах HTML, перекрывающих друг друга?

Как вызвать несколько событий щелчка мышью на произвольном количестве элементов HTML, перекрывающих друг друга?

Я знаю, что вы можете использовать pointer-events: none;, чтобы ваш щелчок проходил через ваши элементы, но что, если я хочу вызвать событие щелчка мыши на элементе А ТАКЖЕ событие щелчка мыши на произвольно многих других элементах под ним?

Находятся ли элементы в одном дом-узле? Если да, примените onClick к общему родителю. Если нет, вам придется отслеживать положение мыши и сравнивать с элементами все. Дальнейший вопрос. Вы хотите просмотреть? Итак, если две кнопки пересекаются, и вы нажмете одну, сработает ли та, что ниже, которую вы нажали, если бы та, которую вы на самом деле нажали, не сработала? Или только первое попадание?

SirPilan 15.07.2018 16:35

Уточнение: в моем случае у меня есть svg с несколькими перекрывающимися элементами дочернего пути, которые определяют различные многоугольники; все элементы пути являются братьями и сестрами друг друга - вложения между ними не происходит. Я хочу щелкнуть произвольный элемент пути, который, как правило, будет перекрывать один или несколько элементов одноуровневого пути и тем самым запускать (как правило) любое событие мыши, которое было бы инициировано, если бы этот путь был единственным элементом. (Подумайте, щелкнув по фигурам Техаса и США, где я хочу заполнить два ярлыка - «Техас», «США» - одним щелчком мыши по Техасу.)

Magnus 15.07.2018 16:52
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
2
1 283
2

Ответы 2

Решением может быть отслеживание движения мыши с помощью:

$( document ).mousemove();

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

var mousePos = [0,0];
$( document ).mousemove(function( event ) {
    mousePos[0] = event.pageX
    mousePos[1] = event.pageY
});
$("#target").click(function(){
// Compare mouse coordinates and your items ones using offset, height and width
if (mousePos[0] > $('#target2').offset.left){
    // Do whatever you are willing to do
}
});

but what if I want to trigger the mouse-click event on an element AND the mouse-click event on arbitrarily many other elements beneath it?

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

<div id = "topmost">
    <div id = "second">
        <p id = "firstp"></p>
    </div>
</div>

Предположим, вы используете jquery. Ниже показано, как вы будете прослушивать события щелчка из всех элементов ниже div.id = "topmost".

Поскольку нормальный поток событий предназначен для любого события щелчка (может быть событие любого другого типа), которое запускается любым элементом с в самом верхнем элементе div, будет перемещаться к самому внешнему элементу, я перечисляю только самое верхнее событие щелчка, а затем проверяю какой элемент вызвал это событие, проверив идентификатор целевого элемента. e.target будет фактическим элементом, по которому был выполнен щелчок. Вы можете либо переключить target.attr ('id'), либо пропустить его, если условия else.

$(function () {
  $("#topmost").on("click", function (e) {
    e.preventDefault();
    var target = $(e.target);
    if (target.attr('id') === "idOfElement"){
       // code to handle the event
    }else{

});

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