2

I have this slider on my website. I want to move the slider to 360 degrees. How can I change the following script to do so?

$(document).ready(function() {
    /*Slider */
    $('.slider-input').each(function() {
        var currVal = $(this).val();
        if(currVal < 0){
            currVal = 0;
        }
        $(this).parent().children('.slider-content').slider({
            'animate': true,
            'min': -1,
            'max': 201,
            'value' : 201,
            'orientation' : 'vertical',
            'stop': function(e, ui){
                //$(this).prev('.slider-input').val(ui.value); //Set actual input field val, done during slide instead

                //pop handle back to top if we went out of bounds at bottom
                /*
                if ( ui.value == -1 ) {
                    ui.value = 201;
                    $(this).children('.ui-slider-handle').css('bottom','100%');
                }
                */
            },
            'slide': function(e, ui){
                var percentLeft;
                var submitValue;
                var Y = ui.value - 100; //Find center of Circle (We're using a max value and height of 200)
                var R = 100; //Circle's radius
                var skip = false;

                $(this).children('.ui-slider-handle').attr('href',' UI.val = ' + ui.value);

                //Show default/disabled/out of bounds state
                if ( ui.value > 0 && ui.value < 201 ) { //if in the valid slide rang
                    $(this).children('.ui-slider-handle').addClass('is-active');
                }
                else {
                    $(this).children('.ui-slider-handle').removeClass('is-active');
                }

                //Calculate slider's path on circle, put it there, by setting background-position
                if ( ui.value >= 0 && ui.value <= 200 ) { //if in valid range, these are one inside the min and max
                    var X = Math.sqrt((R*R) - (Y*Y)); //X^2 + Y^2 = R^2. Find X.
                    if ( X == 'NaN' ) {
                        percentLeft = 0;
                    }
                    else {
                        percentLeft = X;
                    }
                }
                else if ( ui.value == -1 || ui.value == 201 ) {
                    percentLeft = 0;
                    skip = true;
                }
                else {
                    percentLeft = 0;
                }

                //Move handle
                if ( percentLeft > 100 ) { percentLeft = 100; }
                $(this).children('.ui-slider-handle').css('background-position',percentLeft +'% 100%'); //set css sprite

                //Figure out and set input value
                if ( skip == true ) {
                    submitValue = 'keine Seite';
                    $(this).children('.ui-slider-handle').css('background-position',percentLeft +'% 0%'); //reset css sprite
                }
                else {
                    submitValue = Math.round(ui.value / 2); //Clamp input value to range 0 - 100
                }
                $('#display-only input').val(submitValue); //display selected value, demo only
                $('#slider-display').text(submitValue); //display selected value, demo only
                $(this).prev('.slider-input').val(ui.value); //Set actual input field val. jQuery UI hid it for us, but it will be submitted.
            }
        });
    });
});

The image for the slider must also rotate through 360 degrees.

Soundar
  • 2,569
  • 1
  • 16
  • 24
Carsten
  • 31
  • 1
  • 2
  • Can you be more specific with what you mean by `move`, as well as `the graphics from the slider`? – Bojangles Sep 05 '11 at 20:05
  • He wants to rotate aka move the tick around the corner of the radius, move in a circle to be plain. He did provide a link of the slider. – Rumplin Sep 05 '11 at 20:27
  • @nayish 360 degrees = full circle FYI. – Rumplin Sep 05 '11 at 20:28
  • Recently I found this knob jQuery plugin, it's easy to use and maybe this is what you're searching for. http://controlwheel.com/ – nmsdvid Jun 06 '12 at 09:37

2 Answers2

0

I think jQuery roundSlider plugin is suitable for this requirement.

For more details check the demos and documentation page.

Soundar
  • 2,569
  • 1
  • 16
  • 24
0

To calculate a circle you can use the following formula.

precenttop = (-(cos(ui.value/(100/pi))-1))*50)
percentleft = (sin(ui.value/(100/pi))*50)+50

Then it should rotate around the circle.. a value of 201 fo ui will be in the same position as 1 and -1 is the same as 199.

The explanation of the above is:

cos(ui.value/(100/pi)) <-- ui value ranges from 0 to 200 but the cosine 
                           period is 2pi so devide the ui value so its 
                           somewhere between 0 and 2pi
-1                     <-- result ranges from 1 to -1 and i prefer 0 to 2 so 
                           minus 1 makes it 0 to -2 therefore
-()                    <-- we invert the whole... now it 0 to 2
*50                    <-- since you are using percent 0*50 = 0 and 2*50 = 100
                           ergo it now bounces between 0 and 100.

For the sin, it is almost the same except here we do want the result to be between -1 and 1. We just multiply by 50 (-50 to 50) and add 50 (0 - 100).

Now the result for ui.value equal to 0 percenttop will be 0 and percentleft will be 50. And at

ui.value = 100 50  150 200
top =      100 50  50  0
left =     50  100 0   50

Ergo: circle.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
youri
  • 464
  • 4
  • 16
  • thanks for your answer. i try it your way. is it possible to change the slider for wordpress, that the user turn it to the page he wants? and he automatically jumps to the blog page? thanks carsten – Carsten Sep 09 '11 at 12:10