- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有代码创建动态 slider ,供用户选择频率(从 118.000 Mhz 到 136.975 Mhz)。该列表是动态的,因此用户可以添加或删除频率(及其 slider )。但我有两个问题:
步骤不起作用。它对于“15”或更高值完美工作,但低于此值,步骤不起作用。如果我使用“10”,步数变为 20。如果我选择 5 作为步数(这是我需要的值),则相同。
我无法使用键盘输入!我可以让它与静态代码(例如:静态 div、值等)一起使用,但不能与此动态代码一起使用。另外,键盘输入还存在两个问题。
->
然后 slider 移动到最大值。如果我输入 <-
然后 slider 移动到最小值。有什么建议吗?
var freqs = ["118000", "119550", "121725"];
for (var i = 0; i < freqs.length; i++) {
var $last = $('#freq_table').find('tbody').append("<tr><td class='col-md-2' id='value_freq_" + i + "'>oi</td><td class='col-md-8 center slider' id='td_slider_" + i + "'><div id='slider_" + i + "'></div></td></tr>");
var tmp = noUiSlider.create($('#slider_' + i).get(0), {
start: freqs[i],
step: 10,
range: {
'min': 118000,
'max': 136975
},
format: wNumb({
decimals: 3,
thousand: '.'
}),
}).on('update', function(values, handle) {
var id = this.target.id.slice(-1);
$('#value_freq_' + id).html(values[handle] + ' Mhz');
freqs[id] = values[handle];
});
var item = $('#slider_' + i).get(0);
var handle = item.querySelector('.noUi-handle');
handle.addEventListener('keydown', function(e) {
var value = Number(item.noUiSlider.get());
if (e.which === 37) {
item.noUiSlider.set(value - 10);
}
if (e.which === 39) {
item.noUiSlider.set(value + 10);
}
});
};
最佳答案
您遇到的问题是由 wNumb
引起的选项decimals: 3
这会影响 .get()
您的keydown
的值(value)处理程序。实际上,它返回除以 1000 的值。要更正此问题,请在调用 .get()
之后,然后您需要在加/减 5(或任何步长值)之前将该值重新乘以 1000。
我注意到的另一个问题是 keydown
事件仅绑定(bind)到 for
中的最后一个 slider 无论您用鼠标单击/滑动哪个 slider ,都会循环。原因是 item
的值在 keydown
事件总是#slider_2
(2 来自最后一次循环迭代)。要解决此问题,请使用以下语句将变量分配给刚刚单击的 slider var slider = $(this).closest('.noUi-target')[0];
。
一些用户体验增强
var freqs = ["118000", "119550", "121725"];
var stepSize = 5; // stepSize for the slider and arrow key increments
// Populate sliders by looping the freqs array
for (var i = 0; i < freqs.length; i++) {
// Append label and slider to table
var $last = $('#freq_table').find('tbody').append("<tr><td class='col-md-2' id='value_freq_" + i + "'>oi</td><td style='' class='col-md-8 center slider' id='td_slider_" + i + "'><div id='slider_" + i + "'></div></td></tr>");
// Create the noUiSlider
var tmp = noUiSlider.create($('#slider_' + i).get(0), {
start: freqs[i],
step: stepSize,
range: {
'min': 118000,
'max': 136975
},
format: wNumb({
decimals: 3,
thousand: '.'
}),
}).on('update', function(values, handle) {
var id = this.target.id.slice(-1);
$('#value_freq_' + id).html(values[handle] + ' Mhz');
freqs[id] = values[handle]; // Update the freqs array with new slider value
});
var item = $('#slider_' + i).get(0);
var handle = item.querySelector('.noUi-handle');
var keydownIteration = 1; // track iterations of keydown until keyup. To be used for slider acceleration.
// Add keyboard event to the slider handle
handle.addEventListener('keydown', function(e) {
var slider = $(this).closest('.noUi-target')[0];
var value = Number(slider.noUiSlider.get()) * 1000;
var multiplier = Math.floor(keydownIteration/10) + 1; // multiplier will be used to calculate slider acceleration
if (e.which === 37) {
slider.noUiSlider.set(Math.trunc(value - stepSize*multiplier));
}
if (e.which === 39) {
slider.noUiSlider.set(Math.trunc(value + stepSize*multiplier));
}
keydownIteration++; // increment counter
});
// Add keyboard event to the slider handle
handle.addEventListener('keyup', function(e) {
keydownIteration = 1; // resetting the iteration also resets accelaration
});
};
// When clicking on the label, focus and click the slider
$('#freq_table').on('click', 'td:first-child', function () {
$(this).closest('tr').find('.noUi-handle').focus().click();
});
#freq_table td:nth-child(2) {
width : 300px;
}
#freq_table td:first-child {
cursor : pointer;
}
#freq_table td {
padding : 10px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.0.3/nouislider.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/wnumb/1.1.0/wNumb.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.0.3/nouislider.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="freq_table">
<thead>
</thead>
<tfoot>
</tfoot>
<tbody>
</tbody>
</table>
关于javascript - 步骤在 noUISlider 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48975049/
文档说要使用 slider.noUiSlider.get(); 获取当前值。但是如果 slider 有两个 handle (因此有两个值),我如何获得这两个单独的值? 最佳答案 对于有两个 handl
文档说要使用 slider.noUiSlider.get(); 获取当前值。但是如果 slider 有两个 handle (因此有两个值),我如何获得这两个单独的值? 最佳答案 对于有两个 handl
我正在尝试使用 noUISlider 加载多个 slider ,但它不起作用。使用第一个 slider 时,第二个和第三个 slider 的值会发生变化。我该如何重构一个 slider 的代码,以便我
有没有办法显示非数字的最后点数值。例如,显示 0、100、200、300、更多的点数比例 感谢这个伟大的剧本! 最佳答案 以下解决方案有点麻烦,但它可以满足您的需求。 您可以使用 format选项并将
如何从链接的输出中删除小数位 我正在使用此代码 $("#slider_01").noUiSlider({ start: [2000, 24000], connect: true,
我正在使用 noUiSlider 并遵循如何创建自定义格式的教程: noUiSlider.create(sliderFormat, { start: [ 20 ], step: 10, range:
我正在尝试让 noUiSlider 工作,但没有完成第一步。下面是我正在尝试的最简单的文件,它只是给我一个空白屏幕: noUiSlider - Getting Star
所以我花了最后几个小时试图让 NoUISlider 在基本页面上工作,但我似乎无法让它工作。我到处寻找示例代码,但似乎找不到有效的代码。这是我所拥有的: -->
你能帮我解决 noUIslider 问题吗? 我有简单的 slider : noUiSlider.create(slider, { start: 250, ra
我正在使用 nouislider ( https://refreshless.com/nouislider/ ),我想设置变量的范围值。但如果我使用变量值, slider 将不会创建。 jQuery.
这与我关于 nousliders 的第一个问题非常相关:How to update div in Meteor without helper? (这个标题选得不好,因为它不是为了避免帮助者) Jank
一切都在 100 到 1000 的范围内运行,但在 1000 之后该步骤停止运行,告诉我可以做什么? 最佳答案 step 选项仅适用于范围的第一部分。对于后续部分,您可以为每个单独的范围值传递一个数
嘿,我已经检查了有关重置 noUiSlider 的主题,但我找不到处理我的问题的方法。有什么建议吗? reset Update noUiSlider.create($('#product
您可以拿一个look at this Demo吗?让我知道为什么这个垂直 slider 甚至没有出现?原始演示位于This Page但这对我不起作用! $("#sample-showcase").no
是否可以在不修改值的情况下格式化工具提示?显然,这样做会改变迄今为止的值。 tooltips: [true], format: { from: Number, to: function
我试图在网站上添加几个 slider ,但我被卡住了。我直接从他们的网站下载了 nouislider 脚本,在此之前,我将 jQuery 1.8.0 添加到我的网站。这是我制作的: index.htm
我正在尝试设置 noUiSlider。 我的html是 我的javascript var slider = document.getElementById('slider'); noUiSl
我正在使用 noUiSlider 并尝试将 slider 值用作表单输入值(以工作表单发送)。我已经尝试了各种可以在堆栈溢出中找到的示例,但似乎没有任何效果。这是我的 slider 脚本: var
我有一个 slider ,点数从 21 到 30,数字之间有 10 个标记(像尺子),步长为 0.5。有没有办法限制值,所以用户不能低于 21.5 但标记从 21 开始?我不会听 onchange,因
下面是我对 noUiSlider 的使用,我喜欢它,因为它缺少 jQuery。但是,每当我使用从负数开始的范围时, slider 的设置功能似乎就会被破坏。我假设这是 noUiSlider 的一个实际
我是一名优秀的程序员,十分优秀!