编程语言
首页 > 编程语言> > javascript-如何延迟jQuery-ui滑块事件内的函数

javascript-如何延迟jQuery-ui滑块事件内的函数

作者:互联网

我在页面上有几个jQuery-ui范围滑块,它们在表中添加和删除行,并在滑块上方显示其值,并随着滑块的滑动而实时显示.函数showData必须在完成之前检查并更新每个表行,并且在showData函数返回之前,slide事件似乎不会执行任何操作.该表可能很大(1000行)

这是滑块的设置之一:

.slider({
    min: 0,
    max: 1250,
    step: 50,
    values: [0, 1250],
    range: true,
    slide: function (e, ui) {
        $('span.height').text(ui.values[0] +
                'mm - ' + ui.values[1] + 'mm ');
        showData('height', ui.values, 'range');
    }
});

我的问题是,对于运行速度较慢的计算机的IE用户,在滑动滑块时,甚至看不到滑块手柄的位置都没有改变.直到一秒钟或更长时间.

我想要做的是让$(‘span.height’).text(…部分的Slide函数运行,并且ui滑块句柄在正确的位置(即,在鼠标下方)立即更新.

然后,如果showData函数在大约300毫秒后运行,但是只有在此期间未再次触发slide事件时,它才是完美的.

我只是将showData函数放在滑块的stop事件上,但这不是客户端想要的.

我在jsfiddle上放置了一个工作版本:http://jsfiddle.net/vcgAU/1/

任何帮助,将不胜感激

谢谢

解决方法:

由于您当前的回调看起来非常相似,因此您可以使它们通用,并通过延迟函数运行它们,尽管它会影响不同的事物(高度,宽度,深度),但它必须针对每种类型.您可以创建每个类型的延迟函数,如下所示:

var timers = {};
function delayShowData(type, values) {
  clearTimeout(timers[type]);
  timers[type] = setTimeout(function() {
    $('span.' + type).text(values[0] + 'mm - ' + values[1] + 'mm');
    showData(type, values, 'range');
  }, 300);
}

然后在幻灯片回调中,改为调用此函数,如下所示:

slide: function (e, ui) {
    delayShowData('height', ui.values);
}

You can test a working demo here.在此设置中,它存储了您要进行的更改类型的计时器,因此可以有效地按滑块操作,并且在间隔内再次更改时,它清除了计时器,将300ms计时器重置了…因此仅将其留给300ms将导致为此类型调用showData().

标签:jquery-ui,slider,javascript,jquery,uislider
来源: https://codeday.me/bug/20191023/1916000.html