Мой код:
p {
position: relative;
background-color: blue;
}
p:before {
content: '';
position: absolute;
left:100%;
width: 10px;
height: 100%;
background-color: red;
}
Пожалуйста, смотрите эту скрипку: http://jsfiddle.net/ZWw3Z/5/
Я хотел бы вызвать событие щелчка только на псевдоэлементе (красный бит). То есть я не хочу, чтобы событие щелчка вызывалось синим битом.
javascript
jquery
css
Randomblue
источник
источник
Ответы:
Это невозможно; псевдоэлементы вообще не являются частью DOM, поэтому вы не можете привязать события непосредственно к ним, вы можете привязать только их родительские элементы.
Если у вас должен быть обработчик щелчков только в красной области, вы должны создать дочерний элемент, такой как a
span
, поместить его сразу после открывающего<p>
тега, применитьp span
вместо него стилиp:before
и привязать их.источник
pointer-events
значениях самого элемента и его псевдоэлементаpointer-events
Судя по всему, не подходит для IE9, согласно сообщению jsfiddel, которое опубликовал Илья.На самом деле, это возможно. Вы можете проверить, была ли позиция щелчка за пределами элемента, так как это произойдет, только если
::before
или::after
была нажата кнопка.В этом примере проверяется только элемент справа, но это должно работать в вашем случае.
JSFiddle
источник
:after
нужно ли навести указатель мыши на них, такif (e.clientX > span.offsetLeft + span.offsetHeight)
как эти браузеры не имеют этогоe.offsetX
свойства. Скрипка: jsfiddle.net/Noitidart/wC2p7/18$('a:after').on('click', fn)
но я не вижу, чтобы это произошло: p::before
или::after
находится внутри элемента.В современных браузерах вы можете попробовать использовать свойство css указателя-событий (но это приводит к невозможности обнаружения событий мыши на родительском узле):
Когда целью события является ваш элемент «p», вы знаете, что это ваш «p: before».
Если вам по-прежнему необходимо обнаруживать события мыши на главной странице, вы можете рассмотреть возможность изменения структуры HTML. Вы можете добавить тег span и следующий стиль:
Целями событий теперь являются элементы span и p: before.
Пример без jquery: http://jsfiddle.net/2nsptvcu/
Пример с jquery: http://jsfiddle.net/0vygmnnb/
Вот список браузеров, поддерживающих события указателя: http://caniuse.com/#feat=pointer-events
источник
Мой ответ сработает для всех, кто хочет нажать на определенную область страницы. Это сработало для меня на моем абсолютно позиционированном: после
Благодаря этой статье , я понял (с JQuery) можно использовать
e.pageY
иe.pageX
вместо того , чтобы беспокоиться о томe.offsetY/X
иe.clientY/X
проблема между браузерами.Мне понравилась эта
event.pageY
идея, потому что она всегда будет такой же, как и в отношении документа . Я могу сравнить его с родительским элементом my: after, используя offset (), который возвращает свои X и Y также относительно документа.Поэтому на всей странице я могу предложить диапазон «кликабельных» областей, которые никогда не меняются.
Вот мое демо на codepen .
или если лень для codepen, вот JS:
* Я заботился только о значениях Y для моего примера.
источник
Это работает для меня:
источник
Короткий ответ:
Я это сделал. Я написал функцию для динамического использования для всех маленьких людей там ...
Рабочий пример, который отображается на странице
Рабочий пример входа в консоль
Длинный ответ:
... все еще сделал это.
Это заняло у меня некоторое время, так как элемент psuedo на самом деле отсутствует на странице. Хотя некоторые из приведенных выше ответов работают в НЕКОТОРЫХ сценариях, они ВСЕ не могут быть как динамическими, так и работать в сценарии, в котором элемент имеет неожиданный размер и положение (например, элементы с абсолютным позиционированием, перекрывающие часть родительского элемента). Мой нет.
Использование:
Как это устроено:
Он захватывает высоту, ширину, верхнюю и левую позиции (в зависимости от положения от края окна) родительского элемента и захватывает высоту, ширину, верхнюю и левую позиции (в зависимости от края родительского контейнера). ) и сравнивает эти значения, чтобы определить, где находится элемент psuedo на экране.
Затем он сравнивает, где находится мышь. Пока мышь находится во вновь созданном диапазоне переменных, она возвращает true.
Примечание:
Целесообразно расположить родительский элемент ОТНОСИТЕЛЬНО. Если у вас есть элемент psuedo с абсолютным позиционированием, эта функция будет работать только в том случае, если он позиционируется в зависимости от размеров родителя (поэтому родительский элемент должен быть относительным ... может быть липким или фиксированным будет работать тоже .... Я не знаю).
Код:
Служба поддержки:
Я не знаю .... похоже, что он тупой и любит иногда возвращать auto как вычисленное значение. ВСЕ БРАУЗЕРЫ РАБОТАЮТ ХОРОШО, ЕСЛИ РАЗМЕРЫ УСТАНОВЛЕНЫ В CSS. Так что ... установите свою высоту и ширину на элементах psuedo и перемещайте их только сверху и слева. Я рекомендую использовать его на тех вещах, с которыми у вас все в порядке, когда он не работает. Как анимация или что-то. Хром работает ... как обычно.
источник
event
передается через функцию обработчика событий каждый раз, когда происходит событие. Как щелкать или печатать. Когда мы используем.click()
функцию, мы ждем события нажатия. Мы могли бы указать и сказать,.click(function(e){...})
чтобы событие было,e
но также приемлемо просто использоватьevent
.event
не определено.event
не определено. Это работает в Chrome и Edge, хотя.Добавьте условие в событие Click, чтобы ограничить область кликабельности.
DEMO
источник
Это отредактированный ответ Fasoeu с последними CSS3 и JS ES6
Отредактированный демо без использования JQuery.
Кратчайший пример кода:
Объяснение:
pointer-events
Обнаружение контроля событий, удаление получение событий от цели, но продолжать получать от псевдо-элементов дают возможность нажать на::before
и ,::after
и вы всегда будете знать , что вы нажимаете на псевдо-элемент, однако , если вам все еще нужно нажать кнопку, вы кладете все содержание во вложенном элементе (span
в примере), но поскольку мы не хотим применять какие-либо дополнительные стили,display: contents;
очень удобное решение, и оно поддерживается большинством браузеров .pointer-events: none;
как уже упоминалось в оригинальном сообщении, также широко поддерживается .Часть JavaScript также широко поддерживается
Array.from
иfor...of
, тем не менее, не является необходимой для использования в коде.источник
Ни один из этих ответов не является надежным, и мой не будет намного более надежным.
Оставьте в стороне, если вы попадаете в счастливый случай, когда элемент, на который вы пытаетесь щелкнуть, не имеет отступов (так что все «внутреннее» пространство элемента полностью покрыто подэлементами), тогда вы может проверить цель события click относительно самого контейнера. Если он совпадает, это означает, что вы щелкнули элемент: before или: after.
Очевидно, что это не было бы осуществимо с обоими типами (до и после), однако я реализовал это как исправление взлома / скорости, и оно работает очень хорошо, без кучки проверки позиции, которая может быть неточной в зависимости от миллиона различных факторов ,
источник
Нет, но вы можете сделать это
В HTML-файл добавить этот раздел
В CSS вы можете сделать это
} Надеюсь, это поможет вам
источник