jQuery Slider, Combined Values - Having difficulty with Small Increments

后端 未结 1 1248
臣服心动
臣服心动 2021-01-06 08:02

I have designed a jQuery Slider Control that takes a \'pool\' of points, and allows them to be distributed between multiple sliders. It works pretty well, except that I am h

相关标签:
1条回答
  • 2021-01-06 08:20

    I tried keeping your script intact, but ended up largely rewriting it. It should be solid now. Good news: I have only changed the JS, everything else is intact, though I don't update all your monitoring fields any more.

    DEMO

    $(
      function()
      {
        var
            maxValueSlider = 500,
            maxValueTotal = 1000,
            $sliders = $("#eq .slider"),
            valueSliders = [],
            $displaySpentTotal = $('#spent');
    
        function arraySum(arr)
        {
          var sum = 0, i;
          for(i in arr) sum += arr[i];
          return sum;
        }
    
        $sliders
          .each(
            function(i, slider)
            {
              var
                $slider = $(slider),
                $spent = $slider.next('.spent');
              valueSliders[i] = 0;
              $slider
                .slider(
                  {
                    range: 'min',
                    value: 0,
                    min: 0,
                    max: maxValueSlider,
                    step: 1,
                    animate: true,
                    orientation: "horizontal",
                    slide:
                      function(event, ui)
                      {
                        var
                          sumRemainder = arraySum(valueSliders) - valueSliders[i],
                          adjustedValue = Math.min(maxValueTotal - sumRemainder, ui.value);
                        valueSliders[i] = adjustedValue;
                        // display the current total
                        $displaySpentTotal.text(sumRemainder + adjustedValue);
                        // display the current value
                        $spent.text(adjustedValue);
                        // set slider to adjusted value
                        $slider.slider('value', adjustedValue);
    
                        // stop sliding (return false) if value actually required adjustment
                        return adjustedValue == ui.value;
                      }
                  }
                );
            }
          );
      }
    );
    
    0 讨论(0)
提交回复
热议问题