sashomaga

Moving Dom elements

Apr 26th, 2013
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Create a module that works with moving div elements. Implement functionality for:
  2. Add new moving div element to the DOM
  3. The module should generate random background, font and border colors
  4. All the div elements are with the same width and height
  5. The movements of the div elements can be either circular or rectangular
  6. The elements should be moving all the time */
  7.  
  8. 'use strict';
  9.  
  10. (function () {
  11.     document.getElementById("run-button").addEventListener("click", run);
  12.  
  13.     function run() {
  14.  
  15.         // Clear old divs
  16.         var oldDivs = document.getElementsByTagName('div');
  17.         while (oldDivs.length > 0) {
  18.             oldDivs[0].parentNode.removeChild(oldDivs[0]);
  19.         }
  20.         // Clear all old window.setInterval-s
  21.         var interval_id = window.setInterval("", 9999);
  22.         for (var i = 1; i < interval_id; i++) {
  23.             window.clearInterval(i);
  24.         }
  25.  
  26.         var documentFragment = document.createDocumentFragment();
  27.         // DivCount best performance with 20;
  28.         var divCount = 20;
  29.         for (var i = 0; i < divCount; i++) {
  30.             if (getRandomMoveType() === 1) {
  31.                 var div = module.createDiv("rectangular");
  32.                 documentFragment.appendChild(div);
  33.                 module.moveRectanglePath(div);
  34.             } else {
  35.                 var div = module.createDiv("circle");
  36.                 documentFragment.appendChild(div);
  37.                 module.moveCirclePath(div);
  38.             }
  39.         }
  40.         document.body.appendChild(documentFragment);
  41.     }
  42.  
  43.     function getRandomMoveType() {
  44.         var random = Math.floor(Math.random() * 2);
  45.         return random;
  46.     }
  47. }());
  48.  
  49. var module = (function () {
  50.  
  51.     // Public functions
  52.     return {
  53.         createDiv: function (kind) {
  54.             var element = document.createElement('div');
  55.             element.kind = kind;
  56.             element.style.width = "50px";
  57.             element.style.height = "50px";
  58.             element.style.position = "absolute";
  59.             element.style.top = getRandomPositionTop() + "px";
  60.             element.style.left = getRandomPositionLeft() + "px";
  61.             element.style.backgroundColor = getRandomColor();
  62.             element.innerHTML = "div";
  63.             element.style.fontSize = "30px";
  64.             element.style.color = getRandomColor();
  65.             element.style.border = "5px solid " + getRandomColor();
  66.             // Save initial position
  67.             element.initialTop = parseInt(element.style.top);
  68.             element.initialLeft = parseInt(element.style.left);
  69.              
  70.             return element;
  71.  
  72.             function getRandomColor() {
  73.                 var r = getRandomNumber(0, 255);
  74.                 var g = getRandomNumber(0, 255);
  75.                 var b = getRandomNumber(0, 255);
  76.  
  77.                 return "rgb(" + r + ", " + g + ", " + b + " )";
  78.             }
  79.  
  80.             function getRandomPositionTop() {
  81.                 return getRandomNumber(100, screen.height - 100);
  82.             }
  83.  
  84.             function getRandomPositionLeft() {
  85.                 return getRandomNumber(100, screen.width - 100);
  86.             }
  87.         },
  88.         moveRectanglePath: function (div) {
  89.             var self = div;
  90.             var width = getRandomNumber(100, 200);
  91.             var height = getRandomNumber(100, 200);
  92.             window.setInterval(function () {                              
  93.                     var div = self;
  94.                     var left = parseInt(div.style.left);
  95.                     var startLeft = div.initialLeft;
  96.                     var top = parseInt(div.style.top)
  97.                     var startTop = div.initialTop;
  98.  
  99.                     // left
  100.                     if (top === startTop && left < startLeft + height) {
  101.                         left++;
  102.                         div.style.left = left + "px";
  103.                     }
  104.                     // down
  105.                     if (left === startLeft + height && top < startTop + width) {
  106.                         top++;
  107.                         div.style.top = top + "px";
  108.                     }
  109.                     // right
  110.                     if (top === startTop + width && left > startLeft) {
  111.                         left--;
  112.                         div.style.left = left + "px";
  113.                     }
  114.                     // up
  115.                     if (left === startLeft && top > startTop) {
  116.                         top--;
  117.                         div.style.top = top + "px";
  118.                     }              
  119.             }, getRandomNumber(10, 200), self, width, height);
  120.         },
  121.         moveCirclePath: function (div) {
  122.             var angleInDegrees = 0;
  123.             var self = div;
  124.             var radius = getRandomNumber(100, 200);
  125.  
  126.             window.setInterval(function () {
  127.                 angleInDegrees++;
  128.                 if (angleInDegrees === 360) {
  129.                     angleInDegrees = 0;
  130.                 }
  131.  
  132.                 var div = self;
  133.                 var centerLeft = div.initialLeft;
  134.                 var centerTop = div.initialTop;
  135.  
  136.                 if (angleInDegrees > 360) {
  137.                     angleInDegrees = 0;
  138.                 }
  139.  
  140.                 var angleInRadians = angleInDegrees * Math.PI / 180.0;
  141.                 div.style.top = (radius * Math.cos(angleInRadians) + centerTop) + "px";
  142.                 div.style.left = (radius * Math.sin(angleInRadians) + centerLeft) + "px";
  143.  
  144.             }, getRandomNumber(10,500), self, angleInDegrees, radius);
  145.         },
  146.     }
  147.     // Private function    
  148.     function getRandomNumber(start, end) {
  149.         var random = Math.floor((Math.random() * (end - start) + start));
  150.         return random;
  151.     }
  152. }());
Advertisement
Add Comment
Please, Sign In to add comment