Eingabefelder mit dem Mausrad erhöhen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

In der Vergangenheit haben wir bereits darüber berichtet, wie man +/- Buttons zu numerischen Eingabefeldern hinzufügt, um die Benutzeroberfläche zu verbessern (in manchen Fällen ist es einfacher als Tippen). Leser Hitesh N Chavda hat mich mit der Idee kontaktiert, dies stattdessen mit dem Scrollen des Mausrads zu tun.


Wenn sich der Mauszeiger innerhalb des Eingabefeldes befindet, können Sie das Mausrad verwenden, um die Zahl nach oben und unten zu erhöhen.

Hitesh hat eine Technik dafür mit jQuery entwickelt, die großartig funktioniert. Später fand er ein Plugin, das bereits für die Behandlung von Mausrad-Ereignissen entwickelt wurde, was wirklich nett ist und die Dinge vereinfacht. Nur zum Spaß wird die Demo beide Versionen enthalten.

HTML

Das könnte buchstäblich auf jedem Element funktionieren, aber Textfelder machen am meisten Sinn. Vielleicht könnte dies in einem Zeiterfassungsformular verwendet werden, wo Sie die Anzahl der Stunden/Minuten eingeben müssen, die für etwas aufgewendet wurden. Oder vielleicht in einem Bestellformular, um einzugeben, wie viele von etwas bestellt werden sollen.

In unserer Demo haben wir nur ein Label-Input-Paar, wie man es in fast jedem <form> finden würde.

<div>
    <label for="how-many">How Many? </label>
    <input type="text" id="how-many" class="wheelable" value="1" name="how-many" />
</div>

jQuery

Wenn Sie sich die Version ohne Plugin ansehen möchten, laden Sie einfach die untenstehenden Dateien herunter. Hier behandeln wir der Kürze halber die Verwendung des Plugins. Sie müssen jQuery, das Plugin und Ihre eigene JavaScript-Datei einbinden.

<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>
<script type="text/javascript" src="js/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="js/increment.js"></script>

Wenn der DOM bereit ist, binden wir das neue „mousewheel“-Ereignis an das Eingabefeld. Wenn dieses Eingabefeld ausgelöst wird, inkrementieren wir den Wert um eins, wenn es ein „Aufwärts“-Mausrad-Scrollen ist, und dekrementieren ihn um eins, wenn es „Abwärts“ ist (es sei denn, er ist bereits Null).

Das Anhängen des Bildes in der ersten Zeile dient dazu, dass Benutzer ohne JavaScript die Grafik nicht sehen, die die Mausrad-Scrollbarkeit anzeigt.

$(function() {

    $("div").append('<img src="images/mousewheelupdown.png" alt="Scroll up or down with mousewheel" />');

    $("#how-many").bind("mousewheel", function(event, delta) {
        if (delta > 0) {
            this.value = parseInt(this.value) + 1;
        } else {
            if (parseInt(this.value) > 0) {
                this.value = parseInt(this.value) - 1;
            }
        }
        return false;
     });

});

Was ist mit nicht-numerischen Eingabefeldern?

Das müssen Sie je nach Bedarf handhaben. Jetzt, da Sie das „mousewheel“-Ereignis haben, das das Plugin bereitstellt, kann die Funktion, die Sie schreiben, wenn dieses Ereignis ausgelöst wird, alles sein. In der Demo habe ich ein Texteingabefeld, das durch eine Liste verschiedener Walarten rotiert...

$("#whale").bind("mousewheel", function(event, delta) {
    if (this.value == "Blue") {
        this.value = "Sperm";
    }
    else if (this.value == "Sperm") {
        this.value = "Orca";
    }
    else if (this.value == "Orca") {
        this.value = "Humpback";
    }
    else if (this.value == "Humpback") {
        this.value = "Blue";
    }
    return false;
 });

Schwertwale bekommen in letzter Zeit viel Aufmerksamkeit, Zeit für etwas Buckelwal-Liebe.

Degradation

Dies ist reine progressive Enhancement. Ohne JavaScript bleiben die Eingabefelder weiterhin Eingabefelder, die sich wie jedes andere Eingabefeld verhalten.

Viel Spaß

Demo ansehen   Dateien herunterladen