Mój kod to:
p {
position: relative;
background-color: blue;
}
p:before {
content: '';
position: absolute;
left:100%;
width: 10px;
height: 100%;
background-color: red;
}
Zobacz to skrzypce: http://jsfiddle.net/ZWw3Z/5/
Chciałbym wywołać zdarzenie kliknięcia tylko na pseudoelemencie (czerwony bit). Oznacza to, że nie chcę, aby zdarzenie kliknięcia było uruchamiane na niebieskim bicie.
javascript
jquery
css
Randomblue
źródło
źródło
Odpowiedzi:
To jest niemożliwe; pseudoelementy w ogóle nie są częścią DOM, więc nie możesz powiązać żadnych zdarzeń bezpośrednio z nimi, możesz powiązać tylko z ich elementami nadrzędnymi.
Jeśli musisz mieć moduł obsługi kliknięć tylko na czerwonym obszarze, musisz utworzyć element podrzędny, taki jak a
span
, umieścić go bezpośrednio za<p>
tagiem otwierającym , zastosować stylep span
zamiastp:before
i powiązać z nim.źródło
pointer-events
wartościami dla samego elementu i jego pseudoelementu: jsfiddle.net/ZWw3Z/70pointer-events
nie wydaje się robić sztuczki dla IE9, zgodnie z jsfiddel, który opublikował Ilya.W rzeczywistości jest to możliwe. Możesz sprawdzić, czy pozycja kliknięcia znajdowała się poza elementem, ponieważ nastąpi to tylko po kliknięciu
::before
lub::after
kliknięciu.Ten przykład sprawdza tylko element po prawej, ale to powinno działać w twoim przypadku.
JSFiddle
źródło
:after
, musisz sprawdzić,if (e.clientX > span.offsetLeft + span.offsetHeight)
ponieważ te przeglądarki nie mają teje.offsetX
właściwości. Fiddle: jsfiddle.net/Noitidart/wC2p7/18$('a:after').on('click', fn)
ale tak naprawdę nie widzę, żeby tak się działo: p::before
lub::after
jest umieszczony wewnątrz elementu.W nowoczesnych przeglądarkach możesz wypróbować właściwość css wskaźnika-events (ale prowadzi to do niemożności wykrycia zdarzeń myszy w węźle nadrzędnym):
Kiedy celem zdarzenia jest Twój element „p”, wiesz, że jest to Twój element „p: przed”.
Jeśli nadal musisz wykrywać zdarzenia myszy na głównym p, możesz rozważyć możliwość modyfikacji struktury HTML. Można dodać rozpiętości znacznik i następujący styl:
Celami zdarzenia są teraz zarówno elementy „span”, jak i „p: before”.
Przykład bez jquery: http://jsfiddle.net/2nsptvcu/
Przykład z jquery: http://jsfiddle.net/0vygmnnb/
Oto lista przeglądarek obsługujących zdarzenia wskaźnika: http://caniuse.com/#feat=pointer-events
źródło
Moja odpowiedź będzie działać dla każdego, kto chce kliknąć określony obszar strony. To działało dla mnie w mojej absolutnie pozycji: po
Dzięki tym artykule , zdałem sobie sprawę (z jQuery) mogę użyć
e.pageY
ie.pageX
zamiast martwiće.offsetY/X
ie.clientY/X
problem między przeglądarkami.Podobał mi się ten
event.pageY
pomysł, ponieważ zawsze będzie taki sam, ponieważ był związany z dokumentem . Mogę porównać go do elementu nadrzędnego my: after za pomocą offset (), który zwraca X i Y również względem dokumentu.Dlatego mogę wymyślić zakres „klikalnego” regionu na całej stronie, który nigdy się nie zmienia.
Oto moje demo na codepen .
lub jeśli jest zbyt leniwy, aby zastosować codepen, oto JS:
* W moim przykładzie dbałem tylko o wartości Y.
źródło
To działa dla mnie:
źródło
Krótka odpowiedź:
Ja to zrobiłem. Napisałem funkcję do dynamicznego użycia dla wszystkich małych ludzi ...
Przykład roboczy, który wyświetla się na stronie
Przykład działającego logowania do konsoli
Długa odpowiedź:
... Nadal to zrobiłem.
Zajęło mi to trochę czasu, ponieważ element psuedo nie jest tak naprawdę na stronie. Chociaż niektóre z powyższych odpowiedzi działają w NIEKTÓRYCH scenariuszach, WSZYSTKIE nie działają zarówno dynamicznie, jak i działają w scenariuszu, w którym element ma zarówno nieoczekiwany rozmiar, jak i pozycję (np. Elementy pozycjonowane bezwzględnie nakładające się na część elementu macierzystego). Mój nie.
Stosowanie:
Jak to działa:
Pobiera wysokość, szerokość, górną i lewą pozycję (w oparciu o pozycję od krawędzi okna) elementu nadrzędnego i chwyta wysokość, szerokość, górną i lewą pozycję (w oparciu o krawędź pojemnika nadrzędnego ) i porównuje te wartości, aby ustalić, gdzie element psuedo znajduje się na ekranie.
Następnie porównuje, gdzie jest mysz. Tak długo, jak mysz znajduje się w nowo utworzonym zakresie zmiennych, zwraca wartość true.
Uwaga:
Rozsądnie jest ustawić element macierzysty RELATIVE. Jeśli masz bezwzględnie pozycjonowany element psuedo, ta funkcja będzie działać tylko wtedy, gdy zostanie ustawiona w oparciu o wymiary rodzica (więc rodzic musi być względny ... może lepki lub naprawiony też by działał .... nie wiem).
Kod:
Wsparcie:
Nie wiem .... wygląda na to, że jest głupi i czasami zwraca wartość auto jako wartość obliczoną. Wydaje się, że działa dobrze we wszystkich przeglądarkach, jeśli wymiary są ustawione w CSS. Więc ... ustaw wysokość i szerokość elementów psuedo i przesuwaj je tylko u góry i po lewej stronie. Zalecam używanie go do rzeczy, na których jesteś w porządku, gdy nie działa. Jak animacja czy coś takiego. Chrome działa ... jak zwykle.
źródło
event
jest przekazywany przez funkcję obsługi zdarzenia za każdym razem, gdy zdarzenie jest uruchamiane. Jak klikanie lub pisanie. Kiedy korzystamy z tej.click()
funkcji, czekamy na zdarzenie click. Możemy sprecyzować i powiedzieć,.click(function(e){...})
aby wydarzenie było,e
ale dopuszczalne jest również użycieevent
.event
jest niezdefiniowany.event
jest niezdefiniowany. Działa jednak w Chrome i Edge.Dodaj warunek w zdarzeniu Click, aby ograniczyć obszar klikalny.
PRÓBNY
źródło
To jest edytowana odpowiedź Fasoeu z najnowszym CSS3 i JS ES6
Edytowane demo bez użycia JQuery.
Najkrótszy przykład kodu:
Wyjaśnienie:
pointer-events
kontroluj wykrywanie zdarzeń, usuwając odbieranie zdarzeń od celu, ale wciąż odbieraj z pseudoelementów, możesz klikać::before
i::after
zawsze będziesz wiedział, co klikasz na pseudoelement, jednak jeśli nadal musisz klikać, umieszczasz całą treść w zagnieżdżonym elemencie (span
na przykład), ale ponieważ nie chcemy stosować żadnych dodatkowych stylów,display: contents;
stajemy się bardzo przydatnym rozwiązaniem i jest obsługiwane przez większość przeglądarek .pointer-events: none;
jak już wspomniano w oryginalnym poście, również szeroko wspierane .Część JavaScript również stosowany szeroko wspierany
Array.from
afor...of
jednak nie są one konieczne do wykorzystania w kodzie.źródło
Żadna z tych odpowiedzi nie jest wiarygodna, a moja nie będzie o wiele bardziej wiarygodna.
Odkładając na bok zastrzeżenia, jeśli przejdziesz do szczęśliwego scenariusza, w którym element, który chcesz kliknąć, nie ma wypełnienia (tak, że cała „wewnętrzna” przestrzeń elementu jest całkowicie zakryta przez podelementy), wtedy może sprawdzić cel zdarzenia kliknięcia względem samego kontenera. Jeśli pasuje, oznacza to, że kliknąłeś element: przed lub po.
Oczywiście nie byłoby to możliwe w przypadku obu typów (przed i po), ale zaimplementowałem go jako poprawkę hack / speed i działa bardzo dobrze, bez wiązki sprawdzania pozycji, która może być niedokładna w zależności od około miliona różnych czynników .
źródło
Nie, ale możesz to zrobić
W pliku HTML dodaj tę sekcję
W css możesz to zrobić w ten sposób
} Mam nadzieję, że ci to pomoże
źródło