cialis online pharmacy generic xenical cheap cialis online cialis generic viagra online in canada buy cheap levitra online cialis without a perscription order viagra uk no prescription flagyl cheap generic levitra buying viagra in the uk cheap viagra approved cialis deltasone online buy viagra online without prescription non prescription cialis buy orlistat uk buy cialis in india prednisone 60 mg female viagra online buy viagra without prescription celebrex prescriptions buy cialis canada best prices viagra alternative to prednisone cheapest generic levitra levitra 5mg cheap viagra cialis on line buy xenical without prescription online accutane canadian health care prednisone no prescreption viagra online generic female viagra europe buy cialis low price cheap india viagra

How to Create KnobKnob: A Shiny Knob Control with jQuery and CSS3

This tutorial by Martin Angelov of tutorialzine.com will show you how to create a cool shiny knob control called KnobKnob. Made with jQuery and CSS3, this plugin uses CSS transformations and features jQuery’s new handling method. It will definitely give users a fun and interesying way of interactively selecting a pool of values from a range in your WordPress blog.

See the Demo and get the Download.

Step 1: HTML

<!DOCTYPE html>

<html>

<head>

<meta charset=”utf-8″ />

<title>Shiny Switches with CSS3 &amp; jQuery | Tutorialzine Demo</title>

<!– CSS stylesheets –>

<link rel=”stylesheet” href=”assets/css/styles.css” />

<link rel=”stylesheet” href=”assets/knobKnob/knobKnob.css” />

<!–[if lt IE 9]>

<script src=”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script>

<![endif]–>

</head>

<body>

<section id=”main”>

<div id=”bars”>

<div id=”control”>

<!– The knob markup will go here –>

</div>

<!– The colorful dividers will go here –>

</div>

</section>

<!– JavaScript includes –>

<script src=”http://code.jquery.com/jquery-1.7.1.min.js”></script>

<script src=”assets/knobKnob/transform.js”></script>

<script src=”assets/knobKnob/knobKnob.jquery.js”></script>

<script src=”assets/js/script.js”></script>

</body>

</html>

Step 2: jQuery Code

assets/knobKnob/knobKnob.jquery.js

/**
 * @name               jQuery KnobKnob plugin
 * @author             Martin Angelov
 * @version    1.0
 * @url                http://tutorialzine.com/2011/11/pretty-switches-css3-jquery/
 * @license            MIT License
 */

(function($){

        $.fn.knobKnob = function(props){

               var options = $.extend({
                       snap: 0,
                       value: 0,
                       turn: function(){}
               }, props || {});

               var tpl = '<div>\
                               <div></div>\
                               <div></div>\
                       </div>';

               return this.each(function(){

                       var el = $(this);
                       el.append(tpl);

                       var knob = $('.knob',el)
                               knobTop = knob.find('.top'),
                               startDeg = -1,
                               currentDeg = 0,
                               rotation = 0,
                               lastDeg = 0,
                               doc = $(document);

                       if(options.value > 0 && options.value <= 359){
                               rotation = currentDeg = options.value;
                               knobTop.css('transform','rotate('+(currentDeg)+'deg)');
                               options.turn(currentDeg/359);
                       }

                       knob.on('mousedown', function(e){

                               e.preventDefault();

                               var offset = knob.offset();
                               var center = {
                                      y : offset.top + knob.height()/2,
                                      x: offset.left + knob.width()/2
                               };

                               var a, b, deg, tmp,
                                      rad2deg = 180/Math.PI;

                               knob.on('mousemove.rem',function(e){

                                      a = center.y - e.pageY;
                                      b = center.x - e.pageX;
                                      deg = Math.atan2(a,b)*rad2deg;

                                      // we have to make sure that negative
                                      // angles are turned into positive:
                                      if(deg<0){
                                              deg = 360 + deg;
                                      }

                                      // Save the starting position of the drag
                                      if(startDeg == -1){
                                              startDeg = deg;
                                      }

                                      // Calculating the current rotation
                                      tmp = Math.floor((deg-startDeg) + rotation);

                                       // Making sure the current rotation
                                      // stays between 0 and 359
                                      if(tmp < 0){
                                              tmp = 360 + tmp;
                                      }
                                      else if(tmp > 359){
                                              tmp = tmp % 360;
                                      }

                                      // Snapping in the off position:
                                      if(options.snap && tmp < options.snap){
                                              tmp = 0;
                                      }

                                      // This would suggest we are at an end position;
                                      // we need to block further rotation.
                                      if(Math.abs(tmp - lastDeg) > 180){
                                              return false;
                                      }

                                      currentDeg = tmp;
                                      lastDeg = tmp;

                                      knobTop.css('transform','rotate('+(currentDeg)+'deg)');
                                      options.turn(currentDeg/359);
                               });

                               doc.on('mouseup.rem',function(){
                                      knob.off('.rem');
                                      doc.off('.rem');

                                      // Saving the current rotation
                                      rotation = currentDeg;

                                      // Marking the starting degree as invalid
                                      startDeg = -1;
                               });

                       });
               });
        };

})(jQuery);

assets/js/script.js

$(function(){

        var colors = [
               '26e000','2fe300','37e700','45ea00','51ef00',
               '61f800','6bfb00','77ff02','80ff05','8cff09',
               '93ff0b','9eff09','a9ff07','c2ff03','d7ff07',
               'f2ff0a','fff30a','ffdc09','ffce0a','ffc30a',
               'ffb509','ffa808','ff9908','ff8607','ff7005',
               'ff5f04','ff4f03','f83a00','ee2b00','e52000'
        ];

        var rad2deg = 180/Math.PI;
        var deg = 0;
        var bars = $('#bars');

        for(var i=0;i<colors.length;i++){

               deg = i*12;

               // Create the colorbars

               $('<div>').css({
                       backgroundColor: '#'+colors[i],
                       transform:'rotate('+deg+'deg)',
                       top: -Math.sin(deg/rad2deg)*80+100,
                       left: Math.cos((180 - deg)/rad2deg)*80+100,
               }).appendTo(bars);
        }

        var colorBars = bars.find('.colorBar');
        var numBars = 0, lastNum = -1;

        $('#control').knobKnob({
               snap : 10,
               value: 154,
               turn : function(ratio){
                       numBars = Math.round(colorBars.length*ratio);

                       // Update the dom only when the number of active bars
                       // changes, instead of on every move

                       if(numBars == lastNum){
                               return false;
                       }
                       lastNum = numBars;

                       colorBars.removeClass('active').slice(0, numBars).addClass('active');
               }
        });

});         

You can use this versatile plugin anywhere in your website as part of the administrative pages or even in the control panels.

Related Posts

Planum Multipurpose WordPress Theme

Starter Responsive WordPress One-Page Theme

Brawny Multipurpose Theme for WordPress

Cuda Responsive One-Page WordPress Theme

2 Comments

  1. Thank you man! This control switch will be perfect for my new WP music site with DJ sets!
    I’ll try to config it a little bit, but I’m afraid that my skills don’t handle that :)

  2. The knobknob is a must add to my wordpress blog. Thanks for sharing the tutorial with us.