JQuery Slider, wie man "Schritt" Größe ändern kann
Ist es möglich mit dem JQuery-Slider (range slider /dual-Schieberegler), um nicht-lineare (nicht konsequenten "Schritt" Größe -) Werte?
Ich will horizontalen Schieberegler Aussehen:
|---- | ---- | ---- | ---- | ---- | -------- | -------- | ------------------------- | --------------------------|...
0 500 750 1000 1250 1500 2000 2500 75000 100000...
Zum Beispiel, ich möchte den folgenden JQuery-code:
var values = [0, 500, 750, 1000, 1250, 1500, 2000, 2500, 75000, 100000, 150000, 200000, 250000, 300000, 350000, 400000, 500000, 1000000];
var slider = $("#price-range").slider({
orientation: 'horizontal',
range: true,
min: 0,
max: 1000000,
values: [0, 1000000],
slide: function(event, ui) {
var includeLeft = event.keyCode != $.ui.keyCode.RIGHT;
var includeRight = event.keyCode != $.ui.keyCode.LEFT;
slider.slider('option', 'value', findNearest(includeLeft, includeRight, ui.value));
$("#price-amount").html('$' + ui.values[0] + ' - $' + ui.values[1]);
return false;
},
change: function(event, ui) {
getHomeListings();
}
});
function findNearest(includeLeft, includeRight, value) {
var nearest = null;
var diff = null;
for (var i = 0; i < values.length; i++) {
if ((includeLeft && values[i] <= value) || (includeRight && values[i] >= value)) {
var newDiff = Math.abs(value - values[i]);
if (diff == null || newDiff < diff) {
nearest = values[i];
diff = newDiff;
}
}
}
return nearest;
}
Den code oben ist nicht genau arbeiten, aber die snap to grid-Funktionalität nicht funktioniert.
InformationsquelleAutor der Frage | 2009-06-08
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob Sie möchten, dass der regler Skala im Verhältnis zu Ihrem Werte* aber wenn das so ist, habe ich eine Lösung für jemand anderes, der die gleiche Frage gestellt. Sie finden meine Lösung hier. Im Grunde nutze ich die
slide
Ereignis wird ausgelöst, wenn Sie den Schieberegler bewegen, um imitieren das stepping, aber basierend auf einer benutzerdefinierten array definieren der Schritte. Auf diese Weise können Sie nur "Schritt" auf Ihre vordefinierten Werte, auch wenn Sie nicht gleichmäßig verteilt sind.*In anderen Worten, wenn Sie möchten, dass Ihre regler, um wie folgt Aussehen:
dann gehen Sie mit einer der anderen Lösungen hier, aber wenn Sie möchten, dass Ihre regler, um wie folgt Aussehen (Abbildung nicht maßstabsgetreu):
Dann die Lösung, die ich verlinkt kann mehr sein, was Sie nach.
Edit: Ok, diese version des Skripts sollte die Arbeit mit den dual-Slider:
Beachten Sie, dass es ein wenig komisch aussieht unten ganz Links Ende, da die Sprünge so nahe beieinander im Vergleich zu der rechten Seite, aber Sie können sehen, seine stepping als erwünscht, wenn Sie verwenden Sie Ihre Tastatur Pfeile, um verschieben Sie den Schieberegler. Einzige Möglichkeit das zu umgehen, ist die änderung der Skala nicht ganz so drastisch exponentiell.
Edit 2:
Ok, wenn der Abstand ist zu übertrieben, wenn Sie die wahren Werte, Sie könnte verwenden eine Reihe von gefälschten Werte für die slider & schauen dann, bis der Reale Wert dieser entspricht, wenn Sie verwenden müssen, um den realen Wert (in einer ähnlichen Weise zu dem, was die anderen Lösungen hier vorgeschlagen). Hier ist der code:
Können Sie die Geige mit den zahlen in der
values
array (das sind die Schieberegler stop-Punkte), bis Sie Holen Sie Sie heraus gesperrt wie Sie wollen. Auf diese Weise können Sie machen es sich, aus der Perspektive des Benutzers, wie es ist, Schiebe proportional zu den Werten, aber ohne als übertrieben. Natürlich, wenn Sie Ihre wahren Werte werden dynamisch erstellt, müssen Sie möglicherweise zu kommen mit einem neuen Algorithmus zum generieren der Werte des Reglers, anstatt statisch zu definieren...InformationsquelleAutor der Antwort Alconja
HTML:
JS:
InformationsquelleAutor der Antwort Bharat Parmar
Eine option für Sie ist, verwenden Sie eine Schrittweite ein und verweisen auf ein array mit den ausgewählten Werten. Bei 0 beginnen, gehen bis zu 20, get array[value_of_slider] um den tatsächlichen Wert. Ich weiß nicht, regler gut genug, um zu sagen ob oder nicht es ist ein Weg zu geben Sie benutzerdefinierte Werte.
InformationsquelleAutor der Antwort Seburdis
Basierend auf den obigen Antworten und Diskussion von @Seburdis, und die Namen aus deinem Beispiel:
InformationsquelleAutor der Antwort karim79
Ich denke, ich kann Ihnen eine bessere Lösung:
Die Idee ist, halten Sie ein array mit meinem real-Werte, abgesehen von den regler, dann die
step
Attribut immer auf 1 und lassen Sie die regler arbeiten mit derindex
dieses array und Hole dann den realen Wert von meinem real Daten-array. Hoffe das Beispiel Hilft: http://jsfiddle.net/3B3tt/3/InformationsquelleAutor der Antwort Broshi
Jemand geschrieben das auf der jQuery-website. Siehe:
http://forum.jquery.com/topic/non-linear-logarithmic-or-exponential-scale-for-slider
und
http://jsbin.com/ezema
Es ist genau das, was yo müssen, aber viel einfacher (wie 1 Zeile code).
InformationsquelleAutor der Antwort Nitroware
Hier ist meine einfache Lösung für ein benutzerdefiniertes (nicht konsequenten "Schritt" - Größe) dual-slider (Sie können es ändern, um ein single-Schieberegler, wenn sich die Idee wird klar)
mein slider ist mit "slider-euro", den text-Bereich benannt ist-Betrag-euro können Sie im code sehen.
Die Idee ist, mit einem Schieberegler von 0 bis 100 und ein array ("realvalues") mit 101 Plätzen. Die Schieberegler-Wert wird verstanden als die Stelle im array. Die einzige Sache ist, dass Sie für die Referenz auf array, wenn Sie die Schieberegler-Werte.
Hier ist mein Beispiel:
InformationsquelleAutor der Antwort omega
hier ist, wie ich meine.
demo hier - http://janpatricklara.com/web/extra/jQueryUISliderUnevenSteps.html
haben eine Reihe von gewünschten Werte
haben die Schieberegler Inkrement von 0 bis zur Länge des Arrays, mit den Schritten von 1.
Ausgang der Wert aus dem index des Arrays anstelle der Verwendung der Schieberegler, der eigentliche Wert.
diese Weise die Stufen und die Stufen sind gleichmäßig verteilt. danach können Sie einfach schnappen Sie sich den Wert des label oder speichern Sie es in einer var.
InformationsquelleAutor der Antwort jplara
wenn min und max Wert sind die gleichen, Schieberegler-Wert ändern sich nicht
ändern Sie diesen Teil
in
InformationsquelleAutor der Antwort flex
Hatte ich, etwas ähnliches zu tun, und wenn auch das ist eine späte Reaktion, jemand anderes kann geschehen, in diesem thread genauso, wie ich es Tat, und finde meine Lösung als nützlich. Hier ist die Lösung, die ich erstellt:
http://jsfiddle.net/YDWdu/
InformationsquelleAutor der Antwort Cesar
Nur die Werte ändern.
InformationsquelleAutor der Antwort CJ Madolara
Weiter @Broshi ist jsfiddle oben, hier ist der code für eine benutzerdefinierte Schieberegler mit range deaktiviert:
jQuery:
HTML:
InformationsquelleAutor der Antwort Eamorr