Kaleidoscope with jQuery. Today we continue CSS lessons. Let’s remember an ancient toy – a kaleidoscope, I think everyone remembers since the childhood. You reflected ever as it works? All will probably seem that simply, but is far not so. Today I will show as it is possible to make a kaleidoscope with use JS and CSS. Quite probably that the total example will work not in all browsers, but the demo will be pleasant enough to try.
Here are sample and downloadable package:
[sociallocker]
[/sociallocker]
Ok, download the example files and lets start coding !
Step 1. HTML
As usual, we start with the HTML.
This is our main page with our kaleidoscope.
index.html
01 | < link rel = "stylesheet" href = "css/main.css" type = "text/css" media = "all" /> |
02 | < script src = "js/jquery.min.js" type = "text/javascript" ></ script > |
03 | < script src = "js/main.js" type = "text/javascript" ></ script > |
05 | < div class = "kal_main" > |
06 | < div class = "kal_cont" > |
07 | < div class = "ks s1" >< div class = "ksc" ></ div ></ div > |
08 | < div class = "ks s2" >< div class = "ksc" ></ div ></ div > |
09 | < div class = "ks s3" >< div class = "ksc" ></ div ></ div > |
10 | < div class = "ks s4" >< div class = "ksc" ></ div ></ div > |
11 | < div class = "ks s5" >< div class = "ksc" ></ div ></ div > |
12 | < div class = "ks s6" >< div class = "ksc" ></ div ></ div > |
13 | < div class = "ks s7" >< div class = "ksc" ></ div ></ div > |
14 | < div class = "ks s8" >< div class = "ksc" ></ div ></ div > |
15 | < div class = "ks s9" >< div class = "ksc" ></ div ></ div > |
16 | < div class = "ks s10" >< div class = "ksc" ></ div ></ div > |
17 | < div class = "ks s11" >< div class = "ksc" ></ div ></ div > |
18 | < div class = "ks s12" >< div class = "ksc" ></ div ></ div > |
Our kaleidoscope will consist of 12 sectors settling down on a circle. Each sector represents a triangle at with background image, which will shifting by a mouse moving over these sectors. Each sector will represent the following code: <div class=”ks s{X}”><div class=”ksc”></div></div> where {X} – sector number
Step 2. CSS
Here are used CSS styles.
css/main.css
01 | body{ background : #eee ; font-family : Verdana , Helvetica , Arial , sans-serif ; margin : 0 ; padding : 0 } |
02 | .example{ background : #FFF ; width : 500px ; height : 500px ; border : 1px #000 solid ; margin : 20px auto ; padding : 20px ;-moz-border-radius: 3px ;-webkit-border-radius: 3px } |
04 | .kal_main{ overflow : hidden ; width : 500px ; height : 500px ; margin : auto } |
05 | .kal_cont{ width : 140% ; height : 140% ; left : -20% ; top : -20% ; position : relative ; margin : auto } |
07 | -webkit-transform-origin: right top ;-moz-transform-origin: right top ;-o-transform-origin: right top ;transform-origin: right top ; |
08 | width : 50% ; height : 50% ; position : absolute ; top : 50% ; left : 0 ; z-index : 10 ; overflow : hidden ; |
11 | height : 100% ; width : 100% ;-webkit-transform:rotate( 30 deg);-moz-transform:rotate( 30 deg);-o-transform:rotate( 30 deg);transform:rotate( 30 deg); position : relative ;-webkit-transform-origin: left top ;-moz-transform-origin: left top ;-o-transform-origin: left top ;transform-origin: left top ; left : 100% ; top : 0 ; |
12 | background-image : url (../patterns/pic.jpg) |
16 | -webkit-transform: rotate( -30 deg); |
17 | -moz-transform: rotate( -30 deg); |
18 | -o-transform: rotate( -30 deg); |
19 | transform: rotate( -30 deg); |
22 | -webkit-transform: rotate( 30 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
23 | -moz-transform: rotate( 30 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
24 | -o-transform: rotate( 30 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
25 | transform: rotate( 30 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
28 | -webkit-transform: rotate( 30 deg); |
29 | -moz-transform: rotate( 30 deg); |
30 | -o-transform: rotate( 30 deg); |
31 | transform: rotate( 30 deg); |
34 | -webkit-transform: rotate( 90 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
35 | -moz-transform: rotate( 90 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
36 | -o-transform: rotate( 90 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
37 | transform: rotate( 90 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
40 | -webkit-transform: rotate( 90 deg); |
41 | -moz-transform: rotate( 90 deg); |
42 | -o-transform: rotate( 90 deg); |
43 | transform: rotate( 90 deg); |
46 | -webkit-transform: rotate( 150 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
47 | -moz-transform: rotate( 150 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
48 | -o-transform: rotate( 150 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
49 | transform: rotate( 150 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
52 | -webkit-transform: rotate( 150 deg); |
53 | -moz-transform: rotate( 150 deg); |
54 | -o-transform: rotate( 150 deg); |
55 | transform: rotate( 150 deg); |
58 | -webkit-transform: rotate( 210 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
59 | -moz-transform: rotate( 210 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
60 | -o-transform: rotate( 210 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
61 | transform: rotate( 210 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
64 | -webkit-transform: rotate( 210 deg); |
65 | -moz-transform: rotate( 210 deg); |
66 | -o-transform: rotate( 210 deg); |
67 | transform: rotate( 210 deg); |
70 | -webkit-transform: rotate( 270 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
71 | -moz-transform: rotate( 270 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
72 | -o-transform: rotate( 270 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
73 | transform: rotate( 270 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
76 | -webkit-transform: rotate( 270 deg); |
77 | -moz-transform: rotate( 270 deg); |
78 | -o-transform: rotate( 270 deg); |
79 | transform: rotate( 270 deg); |
82 | -webkit-transform: rotate( 330 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
83 | -moz-transform: rotate( 330 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
84 | -o-transform: rotate( 330 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
85 | transform: rotate( 330 deg) matrix( -1 , 0 , 0 , 1 , 0 , 0 ); |
s1 – s12 – sectors. As you can see – each sector have own rotation and used matrix.
Step 3. JS
Here are necessary JS files to our project.
js/main.js
1 | $(document).ready( function () { |
2 | $( ".kal_cont" ).each( function (i){ |
3 | $( this ).mousemove( function (e) { |
4 | $( this ).find( ".ksc" ).each( function (i){ |
5 | $( this ).css({backgroundPosition: e.pageX+ "px " +e.pageY+ "px" }); |
So, now we should teach our sample to move backgrounds of sectors while we moving our mouse. We will change background position. Hope this code pretty easy to understand.
js/jquery.min.js
This is just jQuery library file. No need to give full code of that file here. It always available in package
Step 4. Images
Here are our used pattern (I using first image to current demo, but you can play with second pattern too – just change it in CSS file):
Conclusion
Hope this is interesting article for today, and you play well with it 🙂 Good luck!