我不能足够快地将项目推入jasvacript数组

时间:2015-06-12 13:39:04

标签: javascript jquery arrays performance jquery-ui

我有一个jQuery UI滑块,当用户触发滑动功能时,我需要将当前幻灯片值推送到数组中。问题是,当用户滑动手柄太快时,数组的长度和当前索引值不同步。好像数组不能像用户滑动那样快速更新...

有解决方法吗?

感谢。

$( "#slider" ).slider({
     max: gCoordsArray.length,
     min: 0,
     step: 1,
     slide: function(event, ui){

           var direction = '';

           // test whether we are sliding left or right ( increasing / decreasing increment )

           if (ui.value > count) direction = 'right';
           if (ui.value < count) direction = 'left';

           count = ui.value;

           if (direction == 'right') {                            
                test.push(count);                                
                console.log(test.length); // Should match count
                console.log(count); // Should match length
           }

           if (direction === 'left') {
                test.pop();
                console.log(test.length); // Should match count
                console.log(count); // Should match length
           }                                    

     }, 1)

});

1 个答案:

答案 0 :(得分:1)

除了用户一次只移动一步的边缘情况外,

test.lengthcount=ui.value不会相同。

slide event返回当前鼠标位置,如果用户直接跳到最后,ui.valuegCoordsArray.length test.length == 0

一种解决方案可能是在“全局”var(事件处理程序之外)中记录前一个位置并进行比较,例如:

var prevPosition = 0;

$( "#slider" ).slider({
    max: gCoordsArray.length,
    min: 0,
    step: 1,
    slide: function(event, ui) {

        var thisPosition = ui.value;

        if (thisPosition > prevPosition) direction = 'right';
        if (thisPosition < prevPosition) direction = 'left';

        if (direction == 'right')
        {
            while (prevPosition != thisPosition) 
            {
                prevPosition++;
                test.push(prevPosition);
            }
        }
        ... equivalent for left
     }, 1)
});