Schieberegler für die jQuery-Benutzeroberfläche auf Touch-Geräten


95

Ich entwickle eine Website mit der jQuery-Benutzeroberfläche. Auf meiner Website befinden sich mehrere Elemente, die auf Touchscreen-Geräten nicht kompatibel zu sein scheinen. Sie verursachen keine Fehler, aber das Verhalten ist nicht so, wie es sein sollte.

Bei den fraglichen Elementen handelt es sich um Schieberegler und Bereichsschieberegler, wie sie von der jQuery-Benutzeroberfläche definiert wurden. Anstatt eine Berührung als Aufnehmen eines Griffs und ein Ziehen als Ziehen des Griffs über den Schieberegler zu registrieren, wird auf dem Touchscreen nur die gesamte Webseite zur Seite des Bildschirms geschoben. Es funktioniert, wenn Sie auf den Griff tippen und dann auf die Stelle auf dem Schieberegler tippen, an der der Griff enden soll. Dies ist jedoch sehr langsam und nicht ideal. Irgendwelche Ideen?

Ich habe versucht, das jqtouch-Plugin herunterzuladen und dann .touch([...])an alle Aufrufe von slider () und rangelider () anzuhängen, aber das hat nicht funktioniert.

Vielen Dank!

UPDATE: Ich habe diesen "Patch" auf der jQuery UI-Website gefunden

http://bugs.jqueryui.com/ticket/4143

das heißt, es erleichtert den Schieberegler auf dem iPhone, aber jetzt zu einer anderen dummen Frage: Wie kann ich diesen "Patch" in meinen Code integrieren? Füge ich es einfach wie ein Plugin am Anfang des Codes ein?

Antworten:


140

Diese Bibliothek scheint das zu bieten, wonach Sie suchen:

https://github.com/furf/jquery-ui-touch-punch#readme

Es gibt auch einen Beispiel-Verwendungscode (fügen Sie einfach das Plugin hinzu):

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
  $('#widget').draggable();
</script>

28
Hinweis für die Massen: Befestigen Sie es am Schieberegler, nicht am Ganzen. (Für den jQuery-Schieberegler wäre das$('.ui-slider-handle').draggable();
PaulSkinner

17
Jetzt kann ich den Schieberegler über die ganze Seite bewegen !! Das ist lächerlich.
Dekman

Ich kann den Griff in Firefox Mac auf der ganzen Seite verschieben. Ich frage mich, ob wir eine Bedingung setzen müssen, wenn (ipad | iphone) ... dann ziehbar ().
Joe Hyde

13
Scratch meinen ursprünglichen Kommentar oben. Dies funktioniert nur durch Einfügen dieses Plug-Ins in den HEAD. Fügen Sie das <script src> hinzu, indem Sie nicht $ (Selektor) hinzufügen .draggable (); damit die Schiebergriffe funktionieren.
Joe Hyde

6
Sie müssen nur das Touch-Punch-Skript einbinden und fertig. Wie @JoeHyde in seinem zweiten Kommentar sagte, besteht für kein Element die Notwendigkeit, .draggable () aufzurufen. Fügen Sie einfach das Skript hinzu und es sollte funktionieren.
Jack Vial

22

Ich wollte nur ein paar neue Infos dazu hinzufügen. Touch-Punch funktioniert gut für Ipads und Android-Geräte. Der Schieberegler funktioniert jedoch nicht auf Windows Mobile-Geräten, soweit ich dies testen konnte (mit den neuesten Versionen von jquery ui & Touch Punch).

Das Update ist recht einfach. Fügen Sie einfach die folgenden CSS-Regeln zum .ui-slider-handle hinzu:

-ms-touch-action: none;
touch-action: none;

Hoffe das hilft


nicht für mich arbeiten? Ein Beispiel Link bitte @Stijn_d
ShibinRagh

uhh aber das ruiniert die Funktion des eigentlichen Touch Punch
user151496

Dies hat mein Problem behoben. Vielen Dank!
parker_codes

Ich arbeite auch nicht an einem Dell-Laptop mit Touchscreen jsfiddle.net/jhtcqbqo
Jean-François Beauchamp

5

Wie von @dazbradbury vorgeschlagen, kann die Touchpunch- Bibliothek dabei helfen, die Mausereignisse in Berührungsereignisse zu übersetzen. Die Parameter in .draggable () begrenzen die Bewegung des Schiebereglers, sodass er nicht über das übergeordnete Element des Schiebereglers hinaus verschoben werden kann.

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
$(".ui-slider-handle").draggable({ 
    axis: "x",
    containment: "parent"
});
</script>

BEARBEITEN: Wenn Sie bereits einen Jquery-UI-Schieberegler verwenden , müssen Sie nur die Touchpunch-Bibliothek einschließen. Rufen Sie nicht .draggable () für das .ui-slider-Handle auf, da dadurch die vorhandene Funktionalität überschrieben wird.


Das hat es für mich zum Laufen gebracht. Das einzige Problem ist jetzt, dass der Hintergrundbereich (wenn Bereich: "min" eingestellt ist) nicht der Schiebereglerposition entspricht.
Ejectamenta

3

Ich hatte das gleiche Problem. Ich habe eine ausgefeilte Slider-Benutzeroberfläche entwickelt, die auf dem Slider der jQuery-Benutzeroberfläche aufbaut, nur um festzustellen, dass sie auf Mobilgeräten überhaupt nicht funktioniert. Ich habe die hier aufgeführten Vorschläge ausprobiert, aber da ich eine benutzerdefinierte Lösung habe, die nur auf dem jQuery UI Slider basiert, hat sie nicht funktioniert.

Verwenden Sie einfach noUiSlider .

Es bietet alle aufwändigen Funktionen (und vieles mehr), die ich auf dem Schieberegler der jQuery-Benutzeroberfläche erstellt habe. Es funktioniert wunderbar auf Mobilgeräten und ist auch einfach zu stylen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.