Chcę dodać niestandardowe menu prawym przyciskiem myszy do mojej aplikacji internetowej. Czy można to zrobić bez korzystania z gotowych bibliotek? Jeśli tak, to jak wyświetlić proste niestandardowe menu po kliknięciu prawym przyciskiem myszy, które nie korzysta z zewnętrznej biblioteki JavaScript?
Dążę do tego, co robi Dokumenty Google. Umożliwia użytkownikom kliknięcie prawym przyciskiem myszy i pokazanie użytkownikom własnego menu.
UWAGA: Chcę się nauczyć, jak tworzyć własne, a nie korzystać z czegoś, co ktoś już wcześniej stworzył, te biblioteki stron trzecich są pełne funkcji, podczas gdy chcę tylko tych funkcji, których potrzebuję, więc chcę, aby były całkowicie ręcznie wykonane przez mnie.
javascript
contextmenu
right-click
zarejestrowany użytkownik
źródło
źródło
Odpowiedzi:
Odpowiadając na pytanie - użyj
contextmenu
zdarzenia, takiego jak poniżej:Ale powinieneś zadać sobie pytanie, czy naprawdę chcesz zastąpić domyślne zachowanie po kliknięciu prawym przyciskiem myszy - zależy to od aplikacji, którą tworzysz.
JSFIDDLE
źródło
e.preventDefault();
. Dlatego zwykłe menu nie jest wyświetlane. Co możesz zrobić, to stworzyć logikę warunkową, która sprawdza, czy klawisz zostanie naciśnięty podczas kliknięcia prawym przyciskiem myszy, a następnie NIE wołae.preventDefault()
- wtedy pojawi się zwykłe menu przeglądarki.Był dla mnie bardzo przydatny. W trosce o ludzi takich jak ja, oczekujących na narysowanie menu, umieściłem tutaj kod, którego użyłem do utworzenia menu prawym przyciskiem myszy:
źródło
mouseY(event)
imouseX(event)
with,px
aby działał zgodnie z oczekiwaniami: http://jsfiddle.net/a6w7n64o/ .test
ale nie ma elementu o identyfikatorzetest
. Tylko elementy z klasątest
.jQuery
naprawdę nie jest tak napompowane dodatkowymi rzeczami. Nie do tego stopnia, żeby cokolwiek spowolniło. Jest to bardzo przydatne i to samojQuery
użyte w tej odpowiedzi można łatwo przekonwertować na standardoweJavaScript
polecenia. Może nie być w 100% zgodny z żądaniem z pierwotnego pytania, ale z pewnością jest w 95% zgodny z żądaniem.Kombinacja ładnych CSS i niektórych niestandardowych tagów HTML bez zewnętrznych bibliotek może dać niezły wynik (JSFiddle)
HTML
Uwaga: tag menu nie istnieje, tworzę go (możesz użyć wszystkiego)
CSS
JavaScript jest tylko dla tego przykładu, ja osobiście go usunąć uporczywe menu na okna
Należy również pamiętać, można potencjalnie zmodyfikować
menu > menu{left:100%;}
, abymenu > menu{right:100%;}
otworzyć menu rozwijanym po prawej do lewej. Musisz jednak dodać margines lub coś innegoźródło
Zgodnie z odpowiedziami tutaj i na innych przepływach, stworzyłem wersję, która wygląda jak Google Chrome, z przejściem css3. JS Fiddle
Zacznijmy spokojnie, ponieważ mamy js powyżej na tej stronie, możemy martwić się o css i układ. Układ, którego będziemy używać, to
<a>
element z<img>
niesamowitą ikoną elementu lub czcionki (<i class="fa fa-flag"></i>
) ia,<span>
aby pokazać skróty klawiaturowe. Oto struktura:Umieścimy je w div i pokażemy div przy prawym kliknięciu. Zróbmy je tak, jak w Google Chrome, prawda?
Teraz dodamy kod z zaakceptowanej odpowiedzi i uzyskamy wartość X i Y kursora. Aby to zrobić, użyjemy
e.clientX
ie.clientY
. Używamy klienta, więc div menu musi zostać naprawiony.I to jest to! Po prostu dodaj przejścia css, aby zanikać i gotowe, i gotowe!
Pokaż fragment kodu
źródło
Możesz po prostu zablokować menu kontekstowe, dodając następujące elementy do tagu body:
Spowoduje to zablokowanie dostępu do menu kontekstowego (nie tylko z prawego przycisku myszy, ale również z klawiatury).
PS możesz dodać to do dowolnego tagu, na którym chcesz wyłączyć menu kontekstowe
na przykład:
Wyłącza menu kontekstowe tylko w tym konkretnym div
źródło
Przetestowane i działa w Opera 11.6, Firefox 9.01, Internet Explorer 9 i Chrome 17 Możesz sprawdzić działającą próbkę w menu javascript prawym przyciskiem myszy
źródło
Wiem, że już na nie odpowiedziano, ale spędziłem trochę czasu zmagając się z drugą odpowiedzią, aby zniknąć natywne menu kontekstowe i pokazać, gdzie kliknął użytkownik.
HTML
CSS
JavaScript
Przykład CodePen
źródło
Spróbuj tego
http://jsfiddle.net/AkshayBandivadekar/zakn7Lwb/14/
źródło
Czyste rozwiązanie JS i css dla prawdziwie dynamicznego menu kontekstowego kliknięcia prawym przyciskiem myszy, aczkolwiek oparte na predefiniowanych konwencjach nazewnictwa dla identyfikatora elementów, linków itp. Jsfiddle i kodu, który można skopiować wklej na pojedynczą statyczną stronę HTML:
źródło
Oto bardzo dobry samouczek na temat tworzenia niestandardowego menu kontekstowego z pełnym przykładem działającego kodu (bez JQuery i innych bibliotek).
Możesz także znaleźć ich kod demo na GitHub .
Podają szczegółowe wyjaśnienie krok po kroku, które można wykonać, aby zbudować własne menu kontekstowe po kliknięciu prawym przyciskiem myszy (w tym HTML, CSS i kod javascript) i podsumować je na końcu, podając pełny przykładowy kod.
Możesz łatwo śledzić i dostosować go do własnych potrzeb. I nie ma potrzeby korzystania z JQuery ani innych bibliotek.
Tak wygląda ich przykładowy kod menu:
Przykład działania (lista zadań) można znaleźć na codepen .
źródło
Możesz to zrobić za pomocą tego kodu. odwiedź tutaj, aby uzyskać pełny samouczek z automatycznym wykrywaniem krawędzi http://www.voidtricks.com/custom-right-click-context-menu/
`
źródło
źródło
oncontextmenu
wydarzenie jest uruchamiane (zwykle po kliknięciu prawym przyciskiem myszy)Prostym sposobem na to jest użycie onContextMenu, aby zwrócić funkcję JavaScript:
A po wejściu
return false;
anulujesz menu kontekstowe.jeśli nadal chcesz wyświetlić menu kontekstowe, możesz po prostu usunąć
return false;
linię.źródło
Testowany i działa w Opera 12.17, Firefox 30, Internet Explorer 9 i Chrome 26.0.1410.64
źródło
Co ja tu robię
Użytkownik js, aby wywołać własne działania.
źródło
Powinieneś pamiętać, że jeśli chcesz używać rozwiązania Firefox, jeśli chcesz dodać go do całego dokumentu, powinieneś dodać
contextmenu="mymenu"
go do<html>
tagu, a nie dobody
tagu.Powinieneś na to zwrócić uwagę.
źródło
Możesz dostosować i zmodyfikować ten kod, aby uzyskać lepiej wyglądające, bardziej wydajne menu kontekstowe. Jeśli chodzi o modyfikację istniejącego menu kontekstowego, nie jestem pewien, jak to zrobić ... Sprawdź to skrzypce, aby uzyskać uporządkowany punkt widzenia. Spróbuj także kliknąć elementy w moim menu kontekstowym. Powinni ostrzec Cię o kilku niesamowitych wiadomościach. Jeśli nie działają, spróbuj czegoś bardziej ... złożonego.
źródło
Używam czegoś podobnego do następującego jsfiddle
jeśli celujesz w starsze przeglądarki IE, i tak powinieneś je uzupełnić poleceniem „attachEvent; walizka
źródło