Kode saya adalah:
p {
position: relative;
background-color: blue;
}
p:before {
content: '';
position: absolute;
left:100%;
width: 10px;
height: 100%;
background-color: red;
}
Silakan lihat biola ini: http://jsfiddle.net/ZWw3Z/5/
Saya ingin memicu acara klik hanya pada elemen pseudo (bit merah). Artinya, saya tidak ingin acara klik dipicu pada bit biru.
javascript
jquery
css
Randomblue
sumber
sumber
Jawaban:
Ini tidak mungkin; pseudo-elements sama sekali bukan bagian dari DOM sehingga Anda tidak dapat mengikat acara apa pun secara langsung dengannya, Anda hanya dapat mengikat elemen induknya.
Jika Anda harus memiliki penangan klik pada wilayah merah saja, Anda harus membuat elemen turunan, seperti a
span
, meletakkannya tepat setelah<p>
tag pembuka , menerapkan gayap span
bukanp:before
, dan mengikatnya.sumber
pointer-events
nilai yang berbeda untuk elemen itu sendiri dan elemen pseudo-nya: jsfiddle.net/ZWw3Z/70pointer-events
tampaknya tidak melakukan trik untuk IE9, menurut jsfiddel yang diposting Ilya.Sebenarnya itu mungkin. Anda dapat memeriksa apakah posisi yang diklik berada di luar elemen, karena ini hanya akan terjadi jika
::before
atau::after
diklik.Contoh ini hanya memeriksa elemen di sebelah kanan tetapi itu akan berfungsi dalam kasus Anda.
JSFiddle
sumber
:after
Anda harus memeriksaif (e.clientX > span.offsetLeft + span.offsetHeight)
karena browser ini tidak memilikie.offsetX
properti. Fiddle: jsfiddle.net/Noitidart/wC2p7/18$('a:after').on('click', fn)
tapi saya tidak benar-benar melihat itu terjadi: p::before
atau::after
diposisikan di dalam elemen.Pada peramban modern, Anda dapat mencoba dengan properti pointer-event css (tetapi itu mengarah pada ketidakmungkinan untuk mendeteksi peristiwa mouse pada simpul induk):
Ketika target acara adalah elemen "p" Anda, Anda tahu itu adalah "p: sebelum" Anda.
Jika Anda masih perlu mendeteksi acara mouse pada p utama, Anda dapat mempertimbangkan kemungkinan untuk mengubah struktur HTML Anda. Anda dapat menambahkan tag rentang dan gaya berikut:
Target acara sekarang adalah elemen "span" dan "p: before".
Contoh tanpa jquery: http://jsfiddle.net/2nsptvcu/
Contoh dengan jquery: http://jsfiddle.net/0vygmnnb/
Berikut adalah daftar browser yang mendukung pointer-events: http://caniuse.com/#feat=pointer-events
sumber
Jawaban saya akan bekerja untuk siapa saja yang ingin mengklik area halaman yang pasti. Ini bekerja untuk saya pada posisi saya yang benar-benar: setelah
Berkat artikel ini , saya menyadari (dengan jQuery) saya dapat menggunakan
e.pageY
dane.pageX
bukannya mengkhawatirkan tentange.offsetY/X
dane.clientY/X
mengeluarkan antar browser.Saya menyukai
event.pageY
ide ini karena akan selalu sama, karena itu relatif terhadap dokumen . Saya dapat membandingkannya dengan elemen induk after: saya menggunakan offset (), yang mengembalikan X dan Y juga relatif terhadap dokumen.Oleh karena itu, saya dapat membuat berbagai wilayah "dapat diklik" di seluruh halaman yang tidak pernah berubah.
Ini demo saya tentang codepen .
atau jika terlalu malas untuk codepen, inilah JS:
* Saya hanya peduli tentang nilai-nilai Y untuk contoh saya.
sumber
Ini bekerja untuk saya:
sumber
Jawaban singkat:
Saya melakukannya. Saya menulis fungsi untuk penggunaan dinamis untuk semua orang kecil di luar sana ...
Contoh kerja yang ditampilkan pada halaman
Bekerja contoh masuk ke konsol
Jawaban panjang:
... Masih melakukannya.
Butuh beberapa saat untuk melakukannya, karena elemen psuedo tidak benar-benar ada di halaman. Sementara beberapa jawaban di atas berfungsi dalam skenario BEBERAPA, mereka SEMUA gagal menjadi dinamis dan bekerja dalam skenario di mana elemen keduanya tidak terduga dalam ukuran dan posisi (seperti elemen diposisikan mutlak overlay bagian dari elemen induk). Milik saya tidak.
Pemakaian:
Bagaimana itu bekerja:
Ia meraih posisi tinggi, lebar, atas, dan kiri (berdasarkan posisi yang jauh dari tepi jendela) elemen induk dan meraih posisi tinggi, lebar, atas, dan kiri (berdasarkan tepi wadah induk ) dan membandingkan nilai-nilai tersebut untuk menentukan di mana elemen psuedo berada di layar.
Kemudian membandingkan di mana mouse berada. Selama mouse berada dalam rentang variabel yang baru dibuat maka ia mengembalikan true.
catatan:
Adalah bijaksana untuk membuat elemen induk RELATIF diposisikan. Jika Anda memiliki elemen psuedo yang benar-benar diposisikan, fungsi ini hanya akan berfungsi jika diposisikan berdasarkan dimensi induknya (sehingga induknya harus relatif ... mungkin lengket atau tetap akan berfungsi juga .... Saya tidak tahu).
Kode:
Dukung:
Saya tidak tahu .... sepertinya itu bodoh dan suka mengembalikan otomatis sebagai nilai yang dihitung terkadang. TAMPAKNYA BEKERJA DENGAN BAIK DALAM SEMUA BROWSER JIKA DIMENSI DIRANCANG DALAM CSS. Jadi ... atur tinggi dan lebar Anda pada elemen psuedo Anda dan hanya gerakkan dengan atas dan kiri. Saya sarankan menggunakannya pada hal-hal yang Anda tidak masalah dengan itu tidak berfungsi. Seperti animasi atau semacamnya. Chrome berfungsi ... seperti biasa.
sumber
event
dilewatkan melalui fungsi event handler setiap kali suatu peristiwa dimatikan. Suka mengklik atau mengetik. Saat kami menggunakan.click()
fungsinya, kami menunggu acara klik. Kita dapat menentukan dan mengatakan.click(function(e){...})
untuk membuat acara menjadie
tetapi itu juga dapat diterima untuk hanya menggunakanevent
.event
tidak terdefinisi.event
yang tidak ditentukan. Ini bekerja di Chrome dan Edge.Tambahkan kondisi di acara Klik untuk membatasi area yang dapat diklik.
DEMO
sumber
Ini adalah jawaban yang diedit oleh Fasoeu dengan CSS3 dan JS ES6 terbaru
Demo yang diedit tanpa menggunakan JQuery.
Contoh kode terpendek:
Penjelasan:
pointer-events
mengontrol deteksi peristiwa, menghapus acara penerimaan dari target, tetapi tetap menerima dari elemen semu memungkinkan untuk mengklik::before
dan::after
dan Anda akan selalu tahu apa yang Anda klik pada elemen semu, namun jika Anda masih perlu mengklik, Anda meletakkan semua konten dalam elemen bersarang (span
misalnya), tetapi karena kami tidak ingin menerapkan gaya tambahan,display: contents;
menjadi solusi yang sangat praktis dan didukung oleh sebagian besar browser .pointer-events: none;
seperti yang sudah disebutkan di posting asli juga banyak didukung .Bagian JavaScript juga digunakan secara luas didukung
Array.from
danfor...of
, bagaimanapun, mereka tidak perlu digunakan dalam kode.sumber
Tidak satu pun dari jawaban ini yang dapat diandalkan, dan jawaban saya tidak akan lebih dapat diandalkan.
Selain peringatan, jika Anda masuk ke skenario beruntung di mana elemen yang Anda coba klik tidak memiliki padding (sehingga semua ruang "bagian dalam" elemen tersebut sepenuhnya ditutupi oleh sub-elemen), maka Anda dapat memeriksa target acara klik terhadap wadah itu sendiri. Jika cocok, itu berarti Anda telah mengklik elemen: sebelum atau: setelah.
Jelas ini tidak akan layak dengan kedua jenis (sebelum dan sesudah) namun saya telah menerapkannya sebagai peretasan / perbaikan kecepatan dan berfungsi dengan baik, tanpa banyak pengecekan posisi, yang mungkin tidak akurat tergantung pada sekitar sejuta faktor yang berbeda .
sumber
Tidak, tetapi Anda dapat melakukannya seperti ini
Dalam file html, tambahkan bagian ini
Dalam css Anda bisa melakukan ini
} Semoga ini akan membantu Anda
sumber