Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Create a module that works with moving div elements. Implement functionality for:
- Add new moving div element to the DOM
- The module should generate random background, font and border colors
- All the div elements are with the same width and height
- The movements of the div elements can be either circular or rectangular
- The elements should be moving all the time */
- 'use strict';
- (function () {
- document.getElementById("run-button").addEventListener("click", run);
- function run() {
- // Clear old divs
- var oldDivs = document.getElementsByTagName('div');
- while (oldDivs.length > 0) {
- oldDivs[0].parentNode.removeChild(oldDivs[0]);
- }
- // Clear all old window.setInterval-s
- var interval_id = window.setInterval("", 9999);
- for (var i = 1; i < interval_id; i++) {
- window.clearInterval(i);
- }
- var documentFragment = document.createDocumentFragment();
- // DivCount best performance with 20;
- var divCount = 20;
- for (var i = 0; i < divCount; i++) {
- if (getRandomMoveType() === 1) {
- var div = module.createDiv("rectangular");
- documentFragment.appendChild(div);
- module.moveRectanglePath(div);
- } else {
- var div = module.createDiv("circle");
- documentFragment.appendChild(div);
- module.moveCirclePath(div);
- }
- }
- document.body.appendChild(documentFragment);
- }
- function getRandomMoveType() {
- var random = Math.floor(Math.random() * 2);
- return random;
- }
- }());
- var module = (function () {
- // Public functions
- return {
- createDiv: function (kind) {
- var element = document.createElement('div');
- element.kind = kind;
- element.style.width = "50px";
- element.style.height = "50px";
- element.style.position = "absolute";
- element.style.top = getRandomPositionTop() + "px";
- element.style.left = getRandomPositionLeft() + "px";
- element.style.backgroundColor = getRandomColor();
- element.innerHTML = "div";
- element.style.fontSize = "30px";
- element.style.color = getRandomColor();
- element.style.border = "5px solid " + getRandomColor();
- // Save initial position
- element.initialTop = parseInt(element.style.top);
- element.initialLeft = parseInt(element.style.left);
- return element;
- function getRandomColor() {
- var r = getRandomNumber(0, 255);
- var g = getRandomNumber(0, 255);
- var b = getRandomNumber(0, 255);
- return "rgb(" + r + ", " + g + ", " + b + " )";
- }
- function getRandomPositionTop() {
- return getRandomNumber(100, screen.height - 100);
- }
- function getRandomPositionLeft() {
- return getRandomNumber(100, screen.width - 100);
- }
- },
- moveRectanglePath: function (div) {
- var self = div;
- var width = getRandomNumber(100, 200);
- var height = getRandomNumber(100, 200);
- window.setInterval(function () {
- var div = self;
- var left = parseInt(div.style.left);
- var startLeft = div.initialLeft;
- var top = parseInt(div.style.top)
- var startTop = div.initialTop;
- // left
- if (top === startTop && left < startLeft + height) {
- left++;
- div.style.left = left + "px";
- }
- // down
- if (left === startLeft + height && top < startTop + width) {
- top++;
- div.style.top = top + "px";
- }
- // right
- if (top === startTop + width && left > startLeft) {
- left--;
- div.style.left = left + "px";
- }
- // up
- if (left === startLeft && top > startTop) {
- top--;
- div.style.top = top + "px";
- }
- }, getRandomNumber(10, 200), self, width, height);
- },
- moveCirclePath: function (div) {
- var angleInDegrees = 0;
- var self = div;
- var radius = getRandomNumber(100, 200);
- window.setInterval(function () {
- angleInDegrees++;
- if (angleInDegrees === 360) {
- angleInDegrees = 0;
- }
- var div = self;
- var centerLeft = div.initialLeft;
- var centerTop = div.initialTop;
- if (angleInDegrees > 360) {
- angleInDegrees = 0;
- }
- var angleInRadians = angleInDegrees * Math.PI / 180.0;
- div.style.top = (radius * Math.cos(angleInRadians) + centerTop) + "px";
- div.style.left = (radius * Math.sin(angleInRadians) + centerLeft) + "px";
- }, getRandomNumber(10,500), self, angleInDegrees, radius);
- },
- }
- // Private function
- function getRandomNumber(start, end) {
- var random = Math.floor((Math.random() * (end - start) + start));
- return random;
- }
- }());
Advertisement
Add Comment
Please, Sign In to add comment