Saya ingin menambahkan menu klik kanan khusus ke aplikasi web saya. Apakah ini dapat dilakukan tanpa menggunakan perpustakaan yang dibangun sebelumnya? Jika demikian, bagaimana cara menampilkan menu klik kanan kustom sederhana yang tidak menggunakan perpustakaan JavaScript pihak ke-3?
Saya bertujuan untuk sesuatu seperti yang dilakukan Google Documents. Ini memungkinkan pengguna mengklik kanan dan menunjukkan kepada pengguna menu mereka sendiri.
CATATAN: Saya ingin belajar bagaimana membuat sendiri versus menggunakan sesuatu yang sudah dibuat seseorang sejak sebagian besar waktu, perpustakaan pihak ke-3 itu penuh dengan fitur sedangkan saya hanya ingin fitur yang saya butuhkan jadi saya ingin itu sepenuhnya dibuat oleh tangan saya.
javascript
contextmenu
right-click
Pengguna Terdaftar
sumber
sumber
Jawaban:
Menjawab pertanyaan Anda - gunakan
contextmenu
acara, seperti di bawah ini:Tetapi Anda harus bertanya pada diri sendiri, apakah Anda benar-benar ingin menimpa perilaku klik kanan default - itu tergantung pada aplikasi yang Anda kembangkan.
JSFIDDLE
sumber
e.preventDefault();
. Inilah sebabnya mengapa menu reguler tidak ditampilkan. Yang dapat Anda lakukan adalah membuat beberapa logika kondisional yang memeriksa, jika tombol ditekan saat mengklik kanan dan kemudian TIDAK menelepone.preventDefault()
- Anda akan mendapatkan menu browser biasa.Sangat bermanfaat bagi saya. Demi orang-orang seperti saya, mengharapkan gambar menu, saya taruh di sini kode yang saya gunakan untuk membuat menu klik kanan:
sumber
mouseY(event)
danmouseX(event)
denganpx
membuatnya berfungsi seperti yang diharapkan: http://jsfiddle.net/a6w7n64o/ .test
tetapi tidak ada elemen oleh idtest
. Hanya elemen dengan kelastest
.jQuery
sebenarnya tidak terlalu menggembung dengan hal-hal tambahan. Tidak pada tingkat yang akan memperlambat apa pun. Ini sangat berguna dan samajQuery
digunakan dalam jawaban ini dapat dengan mudah dikonversi keJavaScript
perintah standar . Mungkin tidak 100% sejajar dengan permintaan dalam pertanyaan asli, tapi itu pasti 95% sejajar dengannyaKombinasi beberapa CSS yang bagus dan beberapa tag html non-standar tanpa pustaka eksternal dapat memberikan hasil yang bagus (JSFiddle)
HTML
Catatan: tag menu tidak ada, saya mengada-ada (Anda bisa menggunakan apa saja)
CSS
The JavaScript hanya untuk contoh ini, saya pribadi keluarkan untuk menu persisten pada windows
Juga perhatikan, Anda berpotensi dapat memodifikasi
menu > menu{left:100%;}
untukmenu > menu{right:100%;}
untuk menu yang mengembang dari kanan ke kiri. Anda perlu menambahkan margin atau sesuatu di suatu tempatsumber
Menurut jawaban di sini dan di arus lain, saya telah membuat versi yang mirip dengan Google Chrome, dengan transisi css3. JS Fiddle
Mari kita mulai dengan mudah, karena kita memiliki js di atas pada halaman ini, kita dapat khawatir tentang css dan tata letak. Tata letak yang akan kita gunakan adalah
<a>
elemen dengan<img>
elemen atau ikon font yang mengagumkan (<i class="fa fa-flag"></i>
) dan a<span>
untuk menampilkan pintasan keyboard. Jadi inilah strukturnya:Kami akan meletakkan ini di div dan menunjukkan div itu di klik kanan. Mari kita gaya mereka seperti di Google Chrome, oke?
Sekarang kita akan menambahkan kode dari jawaban yang diterima, dan mendapatkan nilai X dan Y dari kursor. Untuk melakukan ini, kami akan menggunakan
e.clientX
dane.clientY
. Kami menggunakan klien, sehingga div menu harus diperbaiki.Dan itu dia! Cukup tambahkan transisi css ke dalam dan ke luar, dan selesai!
Tampilkan cuplikan kode
sumber
Anda bisa mencoba memblokir menu konteks dengan menambahkan yang berikut ke tag tubuh Anda:
Ini akan memblokir semua akses ke menu konteks (tidak hanya dari tombol mouse kanan tetapi juga dari keyboard).
PS Anda dapat menambahkan ini ke tag apa pun yang Anda inginkan untuk menonaktifkan menu konteks
sebagai contoh:
Akan menonaktifkan menu konteks di div tertentu saja
sumber
Diuji dan berfungsi di Opera 11.6, firefox 9.01, Internet Explorer 9 dan chrome 17 Anda dapat memeriksa sampel yang berfungsi di menu klik kanan javascript
sumber
Saya tahu ini sudah dijawab, tetapi saya menghabiskan waktu bergulat dengan jawaban kedua untuk menghilangkan menu konteks asli dan menampilkannya di tempat pengguna mengklik.
HTML
CSS
JavaScript
Contoh CodePen
sumber
Coba ini
http://jsfiddle.net/AkshayBandivadekar/zakn7Lwb/14/
sumber
JS murni dan solusi css untuk menu konteks klik kanan benar-benar dinamis, meskipun berdasarkan konvensi penamaan standar untuk unsur-unsur id, link dll jsfiddle dan kode Anda bisa copy paste ke halaman statis html tunggal:
sumber
Berikut ini adalah tutorial yang sangat bagus tentang bagaimana membangun menu konteks kustom dengan contoh kode kerja penuh (tanpa JQuery dan perpustakaan lain).
Anda juga dapat menemukan kode demo mereka di GitHub .
Mereka memberikan penjelasan langkah demi langkah terperinci yang dapat Anda ikuti untuk membangun menu konteks klik kanan Anda sendiri (termasuk kode html, css dan javascript) dan merangkumnya di akhir dengan memberikan contoh kode lengkap.
Anda dapat mengikuti dengan mudah dan menyesuaikannya dengan kebutuhan Anda sendiri. Dan tidak perlu untuk JQuery atau perpustakaan lain.
Ini adalah contoh kode menu contohnya:
Contoh kerja (daftar tugas) dapat ditemukan di codepen .
sumber
Anda dapat melakukannya dengan kode ini. kunjungi di sini untuk tutorial lengkap dengan deteksi tepi otomatis http://www.voidtricks.com/custom-right-click-context-menu/
`
sumber
sumber
oncontextmenu
acara yang dipecat (biasanya di klik kanan)Cara sederhana yang bisa Anda lakukan adalah menggunakan onContextMenu untuk mengembalikan fungsi JavaScript:
Dan dengan memasukkan
return false;
Anda akan membatalkan menu konteks.jika Anda masih ingin menampilkan menu konteks, Anda cukup menghapus
return false;
baris.sumber
Diuji dan berfungsi di Opera 12.17, firefox 30, Internet Explorer 9 dan chrome 26.0.1410.64
sumber
Apa yang saya lakukan di sini
Pengguna js untuk memohon tindakan Anda sendiri.
sumber
Anda harus ingat jika Anda ingin menggunakan solusi Firefox saja, jika Anda ingin menambahkannya ke seluruh dokumen Anda harus menambahkan
contextmenu="mymenu"
ke<html>
tag bukan kebody
tag.Anda harus memperhatikan hal ini.
sumber
Anda dapat mengubah dan memodifikasi kode ini untuk membuat menu konteks yang tampak lebih baik dan lebih efisien. Sedangkan untuk memodifikasi menu konteks yang ada, saya tidak yakin bagaimana melakukan itu ... Lihat biola ini untuk sudut pandang yang terorganisir. Juga, coba klik item dalam menu konteks saya. Mereka seharusnya memberi tahu Anda beberapa pesan yang luar biasa. Jika tidak berhasil, coba sesuatu yang lebih ... kompleks.
sumber
Saya menggunakan sesuatu yang mirip dengan jsfiddle berikut
jika Anda menargetkan browser IE yang lebih lama, Anda tetap harus melengkapinya dengan 'attachEvent; kasus
sumber