2010-07-03 2 views
0

У меня есть слайдер на основе jquery на странице. Этот слайдер вызывает функцию для обновления переменной каждый раз при изменении значения и выполняет несколько других действий. Это означает, что функция вызывается слишком часто при перетаскивании ручки ползунка. И это вызывает проблемы с производительностью.Функция триггера javascript после X числа секунд - с условиями

Текущий Psudo:

Slider.onSlide: trigger function ValueChange(V) 
function ValueChange(V) {Variable=V; other code;}; 

Я хочу, чтобы изменить значение только тогда, когда X число миллисекунд (300) прошло с момента последнего изменения. Это значительно улучшит производительность.

Цель состоит в том, чтобы уменьшить количество раз, когда ValueChange (V) срабатывает при раздвижении. Только временная задержка не будет работать здесь, важно, чтобы;

  1. Последнее значение ползунка всегда задается, даже если последняя позиция слайда находилась в пределах периода Х секунд. (хотя он может быть установлен после X числа секунд и не сразу)

  2. Значение изменяется на последнее значение положения ползунка, а не на значение положения ползунка X за несколько секунд до этого.

  3. Я думаю, требуется промежуточная функция, которая затем вызывает ValueChange (V), если эти две проверки выше проходят.

Надеюсь, это имело смысл ... действительно нужна помощь в этом ... слишком сложная для моего под развитым мозгом ... действительно! : D

Заранее спасибо, Norman.

P.S: Решение jQuery для этого также приветствуется, поскольку у меня есть доступная библиотека.

ответ

1

магазин значение в переменной каждый раз, когда она меняется, и использовать функцию, которая выполняется на интервале, чтобы проверить, если значение изменилось:

var currentValue, lastValue; 

function ValueChange(V) { 
    currentValue = V; 
}; 

window.setInterval(function(){ 
    if (lastValue != currentValue) { 
    lastValue = currentValue; 
    Variable = currentValue; other code; 
    } 
}, 50); 

Я выбрал интервал 50 мс. так как это резонансный интервал для оживления вещей. Вы можете попробовать использовать интервал 300 мс., Но это будет обновляться три раза в секунду, что может казаться отрывистым.

+0

Ух ты .... это выглядит просто ... не может дождаться, чтобы поместить это в .... Вы думаете, что может быть достаточно большой накладной расход, потому что setinterval будет срабатывать каждые 300 мс или 50 мс, даже когда никто не сдвигает ползунок? или это нормально, чтобы это было так ... :) Большое вам спасибо! – Norman

+0

@Norman: Я провел некоторое тестирование, начав одновременно много интервалов. Примерно в 130000 метод вызывает секунду, я начал замечать увеличенную нагрузку на ЦП, поэтому накладные расходы на 20 вызовов метода второй не будут даже измеримыми. – Guffa

+0

Аккуратно! Однако единственный недостаток, который я вижу, заключается в том, что currenValue и lastValue становятся глобальными переменными здесь. –

Смежные вопросы