powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Slider: как реализовать обработку?
12 сообщений из 12, страница 1 из 1
Slider: как реализовать обработку?
    #38870805
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть страница, на ней слайдер, указывающий время от 0-10 сек.
Если число на слайдере >0, то запускается ajax запрос с таким интервалом и по полученным данным рисуется график.
Если выбран 0, то запросы не отсылаются и график не обновляется.

Чего хотелось бы:
Есть у слайдера одна callback функция onchangestate, и когда юзер тянет "бегунок" она вызывается десятки раз в секунду, образно говоря, и стартовать столько раз ajax как-то не красиво.

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

зы. нашел какой-то слайдер
http://egorkhmelev.github.io/jslider/
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871035
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871097
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

правильно подсказывают про микропаттерны оптимизации в Javascript: декораторы функций debouncing и throttling .

А для простоты можно обычный setTimeout использовать.
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871187
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, коллеги.

По gui:

Покрутил я этот слайдер, виду него приличный, но поведение плохое.
Мне нужен слайдер, чтобы выбирал дискретные значения и чтобы прыгал между ними, а этот хоть и выбирает дискретно, но не прыгает, а постепенно ползет между значениями, что генерирует туеву хучу вызовов колбэка и т.п.

Порекомендуйте приличный слайдер для выбора дискретных значений.
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871208
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh, что так сложно разобраться в debouncing?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function debounce(fn, args, context) {
  args = (args !== undefined) ? args : {};

  var t = (typeof(args) === 'object') ? (args.timeout || 500) : args;

  clearTimeout(fn.timeoutId);
  fn.timeoutId = setTimeout(function() { fn.call(context, args); }, t);
}


Ну и пример вызова Вашего onchangestate :
Код: javascript
1.
debounce(onchangestate, 150);
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871233
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAWinnipuh, что так сложно разобраться в debouncing?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function debounce(fn, args, context) {
  args = (args !== undefined) ? args : {};

  var t = (typeof(args) === 'object') ? (args.timeout || 500) : args;

  clearTimeout(fn.timeoutId);
  fn.timeoutId = setTimeout(function() { fn.call(context, args); }, t);
}


Ну и пример вызова Вашего onchangestate :
Код: javascript
1.
debounce(onchangestate, 150);



не сложно, разибарюсь, но тяга к прекрасному иногда превалирует, хотя и отдаешь себе отчет в том, что перфекционизм - зло.
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871290
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

может тогда проще в прототип залезть
авторjSlider.prototype.setValue = function(){
var value = this.getValue();
this.inputNode.attr( "value", value );
if(ваше условие, по step или што там есть)
this.onstatechange.call( this, value );
};
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871294
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри

может тогда проще в прототип залезть
Код: javascript
1.
2.
3.
4.
5.
6.
jSlider.prototype.setValue = function(){
    var value = this.getValue();
    this.inputNode.attr( "value", value );
    if(ваше условие, по step или што там есть)
       this.onstatechange.call( this, value );
  };
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871330
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-сорри

может тогда проще в прототип залезть
Код: javascript
1.
2.
3.
4.
5.
6.
jSlider.prototype.setValue = function(){
    var value = this.getValue();
    this.inputNode.attr( "value", value );
    if(ваше условие, по step или што там есть)
       this.onstatechange.call( this, value );
  };



Да, можно кстати и так, в этом случае не вызывается колбэк лишние разы, но вот ползунок ставится в любую позицию.

То есть, если юзер потянул и бросил его посреди - сейчас значение показывает ближайшее к дискретному справа или слева, но ползунок устанавливается, куда его до тянули. А хотелось бы, чтобы он прыгал жестко по дискретным значениям, ближайшим к дропнутой позиции.
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871334
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

http://seiyria.github.io/bootstrap-slider/
вот этим я точно пользовалась, change как нужно отрабатывает
Код: javascript
1.
2.
 var mySlider = $("input.slider").slider({step:100});
 mySlider.on("change", function(e){console.log(e.value)});
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871338
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят, нарыл там параметр не описанный, делает то, что нужно.
Спасибо!
...
Рейтинг: 0 / 0
Slider: как реализовать обработку?
    #38871700
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAWinnipuh, что так сложно разобраться в debouncing?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function debounce(fn, args, context) {
  args = (args !== undefined) ? args : {};

  var t = (typeof(args) === 'object') ? (args.timeout || 500) : args;

  clearTimeout(fn.timeoutId);
  fn.timeoutId = setTimeout(function() { fn.call(context, args); }, t);
}


Ну и пример вызова Вашего onchangestate :
Код: javascript
1.
debounce(onchangestate, 150);



debounce - это то, что надо! спасибо за подсказку.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Slider: как реализовать обработку?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]