jquery-ui slider (): как получить всегда одинаковое значение между дескрипторами - PullRequest
1 голос
/ 01 апреля 2012

Имейте этот самодельный слайдер: http://jsfiddle.net/wyc3P/4/ Что он делает: принимает минимальное и максимальное значения в секундах и преобразует их в формат минута: секунда во время слайда.

Цель состоит в том, чтобы установить максимальное значение между дескрипторами равным 40 секундам.

Я думал, что это работает нормально, пока я не переместил правую ручку, чтобы соответствовать 1:00 - 1:40, но этопоказал 1:00 - 1:41 вместо.Однако, если вы затем переместите левый маркер полностью влево, он будет правильно отображать 0:00 - 0: 40.

Пожалуйста, помогите устранить ошибки кодирования.=)

1 Ответ

1 голос
/ 01 апреля 2012

Ползунки на самом деле находятся на расстоянии 40 (максимум), проблема заключается в том, что ваши минутные / секундные вычисления основаны на использовании исходных ui значений, переданных в функцию, даже если вы установите новое значение:

slide: function(event, ui) {
    if ((ui.values[1]-ui.values[0]) > 40) {
        var index = $(ui.handle).index();
        if (index === 1) {
            // You're setting a new slider position here, but ui.values[1] still contains the old position
            $('#slider').slider('values', 1, ui.values[0]+40);
        } else if (index === 2) {
            $('#slider').slider('values', 0, ui.values[1]-40);
        }
    }

    // your calculations use the original ui values
}

Вам также необходимо обновить ui.values:

    if ((ui.values[1]-ui.values[0]) > 40) {
        var index = $(ui.handle).index();
        if (index === 1) {
            ui.values[1] = ui.values[0] + 40;
            $('#slider').slider('values', 1, ui.values[1]);
        } else if (index === 2) {
            ui.values[0] = ui.values[1] - 40;
            $('#slider').slider('values', 0, ui.values[0]);
        }
    }

http://jsfiddle.net/wyc3P/8/

...