noUiSlider 使用 libLink 自定义格式化时间
noUiSlider custom formatting time with libLink
自定义格式加上 noUiSlider 中时间值的 libLink 对我不起作用。
我想使用滑块以 24 小时格式输出时间(如 17:32)。
我还想输入有效时间并通过 libLink 更新滑块。
当我移动滑块时,输入中的时间会正确更新。但反之则不行:在输入中输入新时间,然后取消聚焦会将输入重置为之前的值。
如果您取消注释函数 HHMMtoMinutes() 中的 console.log,您会看到它触发了两次。这里发生了什么?
$(document).ready(function() {
$(".slider").noUiSlider({
start: ["07:30"],
range: {
'min': 0,
'max': 24 * 60
},
format: {
to: minutesToHHMM,
from: HHMMtoMinutes
}
});
$(".slider").Link("lower").to($("#time"));
});
function minutesToHHMM(value) {
value = Math.round(value);
var hour = Math.floor(value / 60);
var min = value - hour * 60;
//console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}
function HHMMtoMinutes(value) {
var split = value.toString().split(":");
var hour = parseInt(split[0]) * 60;
var min = parseInt(split[1]);
//console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
return hour + min;
}
<link href="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.all.js"></script>
<div style="width:80%; margin:80px 0 0 100px">
<div class="slider"></div>
<form style="margin-top:20px">
<label for="time">time</label>
<input type="text" id="time" name="time" />
</form>
</div>
这里还有一个 JSFiddle:https://jsfiddle.net/g42e6saf/2/
我查看了文档,它似乎有同样的问题,所以这可能是一个错误? (我又看了一遍,现在可以用了)无论如何,这里有一个不使用 libLink 脚本的解决方法 https://jsfiddle.net/q4s4xrL7/2/
$(document).ready(function () {
var $time = $('#time'),
$slider = $('.slider');
$slider.noUiSlider({
start: ["07:30"],
range: {
'min': 0,
'max': 24 * 60 - 1 // and I've subtracted 1 to make the range stop at 23:29
},
format: {
to: minutesToHHMM,
from: HHMMtoMinutes
}
}).on({
slide: updateInputValue
});
function minutesToHHMM(value) {
value = Math.round(value);
var hour = Math.floor(value / 60);
var min = value - hour * 60;
//console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}
function HHMMtoMinutes(value) {
var split = value.toString().split(":");
var hour = parseInt(split[0], 10) * 60;
var min = parseInt(split[1], 10);
//console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
return hour + min;
}
$time.change(function () {
$slider.val($time.val());
});
function updateInputValue() {
$time.val($slider.val());
}
// run when page first loads
updateInputValue();
});
它运行两次是因为libLink
needs to use 滑块.val()
方法要更新。在 link 上设置格式可以解决您的问题。
$(".slider").noUiSlider({
start: [ 0 ],
range: {
'min': 0,
'max': 24 * 60
}
});
$(".slider").Link("lower").to($("#time"), null, {
to: minutesToHHMM,
from: HHMMtoMinutes
});
自定义格式加上 noUiSlider 中时间值的 libLink 对我不起作用。
我想使用滑块以 24 小时格式输出时间(如 17:32)。
我还想输入有效时间并通过 libLink 更新滑块。
当我移动滑块时,输入中的时间会正确更新。但反之则不行:在输入中输入新时间,然后取消聚焦会将输入重置为之前的值。
如果您取消注释函数 HHMMtoMinutes() 中的 console.log,您会看到它触发了两次。这里发生了什么?
$(document).ready(function() {
$(".slider").noUiSlider({
start: ["07:30"],
range: {
'min': 0,
'max': 24 * 60
},
format: {
to: minutesToHHMM,
from: HHMMtoMinutes
}
});
$(".slider").Link("lower").to($("#time"));
});
function minutesToHHMM(value) {
value = Math.round(value);
var hour = Math.floor(value / 60);
var min = value - hour * 60;
//console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}
function HHMMtoMinutes(value) {
var split = value.toString().split(":");
var hour = parseInt(split[0]) * 60;
var min = parseInt(split[1]);
//console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
return hour + min;
}
<link href="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.all.js"></script>
<div style="width:80%; margin:80px 0 0 100px">
<div class="slider"></div>
<form style="margin-top:20px">
<label for="time">time</label>
<input type="text" id="time" name="time" />
</form>
</div>
这里还有一个 JSFiddle:https://jsfiddle.net/g42e6saf/2/
我查看了文档,它似乎有同样的问题,所以这可能是一个错误? (我又看了一遍,现在可以用了)无论如何,这里有一个不使用 libLink 脚本的解决方法 https://jsfiddle.net/q4s4xrL7/2/
$(document).ready(function () {
var $time = $('#time'),
$slider = $('.slider');
$slider.noUiSlider({
start: ["07:30"],
range: {
'min': 0,
'max': 24 * 60 - 1 // and I've subtracted 1 to make the range stop at 23:29
},
format: {
to: minutesToHHMM,
from: HHMMtoMinutes
}
}).on({
slide: updateInputValue
});
function minutesToHHMM(value) {
value = Math.round(value);
var hour = Math.floor(value / 60);
var min = value - hour * 60;
//console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}
function HHMMtoMinutes(value) {
var split = value.toString().split(":");
var hour = parseInt(split[0], 10) * 60;
var min = parseInt(split[1], 10);
//console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
return hour + min;
}
$time.change(function () {
$slider.val($time.val());
});
function updateInputValue() {
$time.val($slider.val());
}
// run when page first loads
updateInputValue();
});
它运行两次是因为libLink
needs to use 滑块.val()
方法要更新。在 link 上设置格式可以解决您的问题。
$(".slider").noUiSlider({
start: [ 0 ],
range: {
'min': 0,
'max': 24 * 60
}
});
$(".slider").Link("lower").to($("#time"), null, {
to: minutesToHHMM,
from: HHMMtoMinutes
});