Skip to content

Instantly share code, notes, and snippets.

@robmorgan
Created May 11, 2010 01:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robmorgan/396781 to your computer and use it in GitHub Desktop.
Save robmorgan/396781 to your computer and use it in GitHub Desktop.
// Redistributable Slider Algorithm
var sliders = $('.slider');
var max = 350;
var slidernum = 3;
var sliderVals = [max/slidernum,max/slidernum,max/slidernum,max/slidernum,max/slidernum,max/slidernum,max/slidernum];
var amounts = [0,0,0,0,0,0,0]
var lockedSlider = 0;
function setSliderVals() {
var json = [];
for (var i = 0; i<sliders.length; i++) {
var s = $(sliders[i]);
sliderVals[i] = Math.floor(s.slider('value') / max * 100000000) / 1000000;
var name = s.attr('name');
json.push('"' + name + '":' + sliderVals[i]);
}
$('input[name=customamount]').val('{' + json.join(',') + '}');
}
var contribution = 0;
function recalculateSliders() {
if (isNaN(contribution)) contribution = 0;
var lockedval = 0;
for (var i = 0; i<sliders.length; i++) {
var s = $(sliders[i]);
if (lockedSlider == i) lockedval = s.slider('value');
}
var sum = 0;
for (var i = 0; i<sliders.length; i++) {
if (lockedSlider == i) continue;
sum += sliderVals[i];
}
var mult = (max - lockedval) / (sum)
for (var i = 0; i<sliders.length; i++) {
if (i == lockedSlider) continue;
var s = $(sliders[i]);
s.slider('value',sliderVals[i] * mult);
}
var moneysurplus = 0;
var divvy = 0;
for (var i = 0; i<sliders.length; i++) {
var s = $(sliders[i]);
var amt = (s.slider('value') / max) * contribution;
if (s.slider('value') == 1) { amt = 0; divvy++; };
amounts[i] = amt;
moneysurplus += amt;
}
moneysurplus -= contribution;
moneysurplus = moneysurplus / (sliders.length - divvy);
for (var i = 0; i<sliders.length; i++) {
var s = $(sliders[i]);
if (s.slider('value') != 1) amounts[i] -= moneysurplus;
s.parent().find('.slider_amount').text(format(amounts[i]));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment