【问题标题】:RangeSlider to show multiple outputRangeSlider 显示多个输出
【发布时间】:2018-09-25 16:25:38
【问题描述】:

我设法获得一个输出,但我想在用户滑动时显示多个输出。我怎样才能做到这一点?

每个输出具有不同的值,例如 1x、1.2x、1.5x、1.3x 和 1.75x

JSFiddle Demo

$('input[type="range"]').rangeslider({polyfill: false});
$('#range').on("input", function() {
$('.output1').val("$"+this.value);
}).trigger("change");
output {
  display: block;
}
<link href="https://rangeslider.js.org/assets/rangeslider.js/dist/rangeslider.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rangeslider.js.org/assets/rangeslider.js/dist/rangeslider.min.js"></script>
<input type="range"  name="range" id="range" value="100" step="25" min="1" max="1100">
    <br />
    <output class="output1">100</output>
    <output class="output2">120</output>
    <output class="output3">150</output>
    <output class="output4">130</output>
    <output class="output5">175</output>

【问题讨论】:

  • 从哪里获得这些值 1x, 1.2x, 1.5x, 1.3x and 1.75x??如果你想生成它们,那么你想应用哪些规则?
  • 不确定乘数来自哪里,但这里有一点帮助,处理您工作所需的一切:jsfiddle.net/jadckr71/3
  • 你只会得到值,你应该用你需要的百分位数自己编码其他值。
  • 从默认的value,在本例中为 100。
  • @ElaineByene 这样听起来更好:jsfiddle.net/jadckr71/6

标签: javascript jquery rangeslider


【解决方案1】:

只需在 range 更改时更新所有 output 值:

$('input[type="range"]').rangeslider({polyfill: false});
$('#range').on("input", function() {
$('.output1').val("$"+parseFloat(this.value*1).toFixed(2));
$('.output2').val("$"+parseFloat(this.value*1.2).toFixed(2));
$('.output3').val("$"+parseFloat(this.value*1.3).toFixed(2));
$('.output4').val("$"+parseFloat(this.value*1.5).toFixed(2));
$('.output5').val("$"+parseFloat(this.value*1.75).toFixed(2));
}).trigger("change");

代码 sn-p:

$('input[type="range"]').rangeslider({polyfill: false});
$('#range').on("input", function() {
$('.output1').val("$"+parseFloat(this.value*1).toFixed(2));
$('.output2').val("$"+parseFloat(this.value*1.2).toFixed(2));
$('.output3').val("$"+parseFloat(this.value*1.3).toFixed(2));
$('.output4').val("$"+parseFloat(this.value*1.5).toFixed(2));
$('.output5').val("$"+parseFloat(this.value*1.75).toFixed(2));
}).trigger("change");
output {
  display: block;
}
<link href="https://rangeslider.js.org/assets/rangeslider.js/dist/rangeslider.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rangeslider.js.org/assets/rangeslider.js/dist/rangeslider.min.js"></script>
<input type="range"  name="range" id="range" value="100" step="25" min="1" max="1100">
    <br />
    <output class="output1">100</output>
    <output class="output2">120</output>
    <output class="output3">150</output>
    <output class="output4">130</output>
    <output class="output5">175</output>

【讨论】:

  • 太棒了!如何在点后限制 2 位数字?而不是$901.1999999999999,我想要$901.20 或者只是$901.19
  • parseFloat(yourString).toFixed(2)
【解决方案2】:
$('input[type="range"]').rangeslider({polyfill: false});

var _multipliers = [
    1,2,3,4,5
].map(function(i){
    return (+$('.output'+i).val() / 100);
});

$('#range').on("input", function() {
  var _value = +this.value;
  [1,2,3,4,5].forEach(function(i){
    $('.output'+i).val("$"+ ((1 + _multipliers[i-1]) * _value).toFixed(2));
  });

}).trigger("change");

对于这种情况,您可以通过最初从地图中获取值来预先计算乘数。 简而言之,使用.map,您可以获得所有初始值并将它们除以 100,因此您将得到乘数(100 -> 1、120 -> 1.2.. 等等)。

之后,您通过访问 _multipliers[i-1] 重复相同的过程来获取值,因为索引是从 0 开始的。

只要所有“输出”保持相同的符号和格式,这个解决方案就可以通用。

小提琴:https://jsfiddle.net/jadckr71/6/

注意:在许多“$”之前的一元运算符+ 是将变量转换为一个数字,这样就不会有它是一个字符串并且会以某种方式连接起来的风险。

【讨论】:

  • 谢谢。我将另一个答案标记为正确,因为我发现它更容易理解。非常感谢你:)
猜你喜欢
  • 2014-03-25
  • 2017-10-28
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2016-06-01
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多