Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 17:01   #1
Nait87
Новичок
Джуниор
 
Регистрация: 02.04.2012
Сообщений: 1
По умолчанию Синхронизация trackbar

Здравствуйте, я хочу сделать 4 синхронизированных между собой трэкбаров. Максимальная сумма равна 25. То есть когда я двигаю один ползунок, другие изменяются в соответствии с алгоритмом, так что бы сумма всех 4 была 25. Вот мой код:
Код:
var max = parseFloat($('#sum').val()) || 100;
            function moveSlider(e, ui) {
                var elSlider = $(ui.handle).parent(),
                boxNumber = elSlider.prev().text("$" + ui.value),
                left = elSlider.outerWidth() * ui.value / max + 52 - boxNumber.outerWidth() / 2,
                right = 'auto';
                if (left + boxNumber.outerWidth() > 552) {
                    left = 'auto';
                    right = 2;
                }
                if (left < 2) left = 2;
                boxNumber.css({ left: left, right: right }).children().val(ui.value);
            }
            function getSlidersSum(val) {
                var sum = 0;
                $('.slider:not(.active)').each(function (i, el) {
                     sum += parseFloat($(el).slider('value'));
                });
                sum += val;
                return sum;
            }
            $('.slider').slider({
                range: 'min',
                min: 0,
                max: max,
                step: 0.01,
                start: function (e, ui) {
                    $(ui.handle).parent().addClass('active');
                },
                stop: function (e, ui) {
                    $(ui.handle).parent().removeClass('active');
                },
                slide: function (e, ui) { //console.log(ui.value+'='+$('.slider.active').slider('value'));
                    moveSlider(e, ui);
                    var val;
                    var vlue;
                    var sum = getSlidersSum(ui.value);
                    var delta = (max - sum) / 3;
                    $('.slider').each(function (i, el) {
                        if ($(el).hasClass('active'))
                            vlue = parseFloat($(el).slider('value'));
                    });
                    $('.slider:not(.active)').each(function (i, el) {
                        val = parseFloat($(el).slider('value'));
                        $(el).slider('value', val + delta);
                        if (i == 2) {
                            $(el).slider('value', max - sum + val);
                        }
                        //console.log('i='+i+', max='+max+', sum='+sum+', val='+val+', delta='+delta);
                    });
                },
                change: moveSlider
            });
            $('.slider.gr').slider("value", max);
            $('.box.gr').css({ left: 'auto', right: 2 });
Проблема заключается в том что если ползунов двигать быстро, то сумма будет больше чем 25. Подскажите в чем проблема? Спасибо!
Nait87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
trackbar delfin07 Помощь студентам 2 07.06.2011 01:44
TrackBar Claster Помощь студентам 0 20.10.2010 01:06
trackbar larry Win Api 3 28.07.2009 09:47
trackbar larry Win Api 4 25.07.2009 20:59
TrackBar Михаил Юрьевич Общие вопросы Delphi 2 29.01.2008 00:43