[英]Optimization , window.setInterval or .change function on range
我有点在想50ms的setInterval函数不好吗? 还是我错了...所以这是这种情况,我有一个输入范围,并且我想在更改时获得该范围的值..所以我有这两个代码..
$('#transparency-range').change(function(){
$(".transparency-color span").text($('#transparency-range').val() + "%")
})
//第二个代码
window.setInterval(function(){
$(".transparency-color span").text($('#transparency-range').val() + "%")
}, 50);
第一个代码可能更适合优化吗? 第一个代码的问题是我没有获得实时的价值信息,因此在我的文本字段中我想显示该信息,数字仅在我完成更改后才更改,而第二个代码则在移动范围输入时获取数字更改..
我在应用程序中使用类似代码超过10次,这就是为什么这个优化问题很重要的原因:)
谢谢!
如果您监听input
事件,那么每次更改都会立即触发input
事件,您可能会得到更好的结果:
$('#transparency-range').on('input', function(){
$(".transparency-color span").text($('#transparency-range').val() + "%");
});
如果这样做可以完成工作,那肯定比使用计时器更好。
setInterval
是跟踪输入更改的错误选择,因为它不与输入中的实际更改同步,它是自己的生活,而且非常重要的是需要使用clearInterval
清除,并通过不必要的执行来阻塞事件循环,从而使整个应用程序慢得多。
更好的方法是监听输入的特定事件,例如change
, input
, keyup
, keypress
, keydown
。 它们是专门为处理此类情况而设计的,这就是为什么它们种类繁多的原因。
因此,如果我们使用input
,它将看起来像这样:
$('#transparency-range').on('input', function(){ $(".transparency-color span").text($(this).val() + "%"); });
键入每个字符后,这将立即为您提供更改反馈。
您可以执行以下操作:
function inputHandler() { $(".transparency-color span").text($(this).val() + "%"); } $('#transparency-range').on('input', inputHandler); //... // later in you code when needed $('#transparency-range').off('input', inputHandler);
使用上述插件,如果您需要在用户停止键入250毫秒后执行函数,则可以执行以下操作:
function inputHandler() { $(".transparency-color span").text($(this).val() + "%"); } $('#transparency-range').on('input', $.debounce(250, inputHandler));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.