Vor kurzem musste ich einige benutzerdefinierte Effekte in das Projekt implementieren, z. B. ein Rechtsklick-Menü, „Alles auswählen“, eine diskontinuierliche Auswahl usw. Ich denke, das Wichtigste ist, die Logik und die Ereignisbeziehungen zu klären. Um dies zu erreichen, stehen auch fertige Plug-Ins zur Verfügung, beispielsweise jQuery UI's auswählbar.
1. Rechtsklick-Menü
Wenn Sie im Internet surfen, klicken Sie mit der rechten Maustaste (oder Strg+Linksklick auf dem Touchpad) und der Standard-Rechtsklick-Menüpunkt des Browsers wird angezeigt, etwa so:
Aber wenn Sie den Rechtsklick auf ein Element anpassen möchten, gehen Sie wie folgt vor:
Sie müssen zuerst das Standardmenü des Browsers deaktivieren und auf das Kontextmenü-Ereignis hören. Der Schlüsselcode lautet wie folgt:
$(function(){ $('#box').on('contextmenu',function(event){ event.preventDefault(); $(this).trigger('click'); $('#menulist').css({ top: event.pageY, left: event.pageX }); }); $('#box').click(function(){ $('#menulist').css('display','block'); }); })
2. Alles auswählen
Die Standardeinstellung Strg+A (Befehl+A unter MAC) wählt die gesamte Webseite oder ein fokussiertes bearbeitbares Element aus.
<div id='box'> <p class='first'>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> </div> <div id='other'> <p class='first'>这是另外一个div,这是另外一个div,</p> <p>这是另外一个div,这是另外一个div,</p> <p>这是另外一个div,这是另外一个div,</p> <p>这是另外一个div,这是另外一个div,</p> </div>
Wenn es nur diese beiden Divs auf der Seite gibt, drücken Sie Strg/cmd+A und beide Divs werden ausgewählt. Wenn Sie nur den Inhalt von div#box auswählen möchten, ist die einfache Möglichkeit, contentEditable=true zu hinzuzufügen die div. Eine andere Möglichkeit besteht darin, auf Tastaturereignisse zu warten.
Simulieren Sie die Auswahl aller Unterelemente p von div#box und deren Hervorhebung:
$(function(){ $(document).keydown(function(event){ //windows下是event.ctrlKey if(event.metaKey && event.which === 65){ event.preventDefault(); $('#box>p').trigger('click'); } }); $('#box').on('click', 'p', function(){ $(this).css('color','red'); }); });
3. Shift ermöglicht kontinuierliche Auswahl
Durch die Kombination der Umschalttaste mit der rechten Maustaste wird eine kontinuierliche Auswahl von Elementen erreicht, die hier einfach simuliert wird.
<div id='box' class="unselect"> <p class='first'>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> <p>这是个div,这是个div,</p> </div>
Wenn Sie die Umschalttaste gedrückt halten, verfügt der Browser standardmäßig über eine kontinuierliche Auswahl. Deaktivieren Sie diese zuerst:
.unselect{ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; }
Für niedrigere IE-Versionen verwenden Sie das Selectstart-Ereignis:
$('#box')[0].onselectstart = function(e){ e.preventDefault(); return false; };
Registrieren Sie das Klickereignis für p und hören Sie sich die Keydown- und Keyup-Ereignisse des Dokumentobjekts an:
$(document).keydown(function(e){ if(e.shiftKey){ shiftkey = 1; } }).keyup(function(){ shiftkey = 0; }); $('#box').on('click','p',function(){ if(shiftkey === 1){ second = $(this).index(); for(var min = Math.min(first,second); min <= Math.max(first,second); min++){ $('#box').find('p').eq(min).css('color','red'); } } else { first = $(this).index(); $(this).css('color','red').siblings().css('color','black'); } })
4. Diskontinuierliche Auswahl
Diskontinuierliche Auswahl erfordert die Überwachung der Strg-Taste (Befehlstaste unter Mac) und die Registrierung eines Klickereignisses für das Element.
$(document).keydown(function(e){ if(e.metaKey){ //win是e.ctrlKey ctrlkey = 2; } }).keyup(function(){ ctrlkey = 0; }); $('#box').on('click','p',function(){ if(ctrlkey === 2){ $(this).css('color','red'); } else { $(this).css('color','red').siblings().css('color','black'); } })
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle beim Erlernen der JQuery-Programmierung hilfreich ist.