Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Задача, вывести от 20 до 1000 кругов (https://javascript.ru/forum/events/68486-zadacha-vyvesti-ot-20-do-1000-krugov.html)

Рустам Гибадуллин 19.04.2017 20:50

Задача, вывести от 20 до 1000 кругов
 
По условиям нужно вывести от 20 до 1000 кругов отрисованных с помощью svg. Цвет, координаты по Х и Y, радиус от 5 до 10 рх генерируется случайно, все эти условия я выполнил, не могу придумать как вывести не 1 а заданное число элементов.
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset = "utf-8">
    <link rel = "stylesheet" href = "style.css">
	<!--<script src = "js.js"></script>-->
  </head>
  
  <body id = "body">
       <div id = "block1">
	     <div id = "block2">
		    <div id = "svg">
				<svg  width = "850" height = "500">
				   <circle id = "bubble" r = 5 cx = "450" cy = "250" fill = "gold" />					
				</svg>
			</div>
                
				<button id = "show_bubble" >Замостить</button>

var showBubble = document.getElementById(show_bubble);	   
	    document.write(showBubble);
	    var numBubbles = numOfBubbles();
	 
	    function numOfBubbles(){       //генерируем количество пузырьков
		   var min = 20;
		   var max = 1000; 
	       for (var i = 0; i < 1  ; i++){
		      randomNumber = Math.floor(Math.random() * (max - min +1)) + min;	   
		      }
		   
		   return randomNumber;
	    
		}

	   for (var i = 0; i < numBubbles; i++){
		var s = display(10);

		function display(theBubbles){
		
		var theBubbles = document.getElementById("bubble");
        var radius = theBubbles.getAttribute("r");
		var color = theBubbles.getAttribute("fill");
	    var axisX = theBubbles.getAttribute("cx");
		var axisY = theBubbles.getAttribute("cy");

		
		var arrColors = ["gold", "green","blue", "crimson", "plum", "lime", "silver", "skyblue"  ];
		
		function randomColor(min, max){ 
	   
		   randomNumber = Math.floor(Math.random() * (max - min +1)) + min;							 
		   return randomNumber;
		                
		}

        function randomWidth(){        // координата по Х
	       var maxX = 850;
		   var minX = 0;
		   randomWidth = Math.floor(Math.random() * (maxX - minX + 1)) + minX;							 
		   return randomWidth;
		                
		}	
        
        function randomHeight(){      // координата по Y
	       var maxY = 600;
		   var minY = 0;
		    randomHeight = Math.floor(Math.random() * (maxY - minY + 1)) + minY;							 
		   return randomHeight;
		                
		}		
		
		
		function generateOfBubbles(){      //генерируем радиус пузырьков				  
	       var min = 5;
		   var max = 10;	   
		      
			  randomNumber = Math.floor(Math.random() * (max - min +1)) + min;
              return randomNumber;							 
		                
		}
		
		var min = 0;
		var max = arrColors.length - 1;
		var numColor = randomColor(min,max);
		theBubbles.setAttribute("fill",arrColors[numColor]);	
		var valWidth = randomWidth();
		theBubbles.setAttribute("cx", valWidth);	
		var valHeight = randomHeight();
		theBubbles.setAttribute("cy", valHeight);
		var valRadius = generateOfBubbles();		
		theBubbles.setAttribute("r", valRadius);
		
    }
	    
	}

</div>
			
	 </div>
  </body>
</html>

рони 19.04.2017 22:36

svg random circle
 
Рустам Гибадуллин,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
</head>

<body>
<svg  width = "850" height = "500">
<circle id = "bubble" r = 5 cx = "450" cy = "250" fill = "gold" />
</svg>
<button id = "show_bubble" >Замостить</button>
   <script>
window.addEventListener("DOMContentLoaded", function() {
    var container = document.querySelector("svg");
    var btn = document.querySelector("#show_bubble");
    var width = +container.getAttribute("width");
    var height = +container.getAttribute("height");
    function rnd(min, max) {
        return min + Math.random() * (max + 1 - min) | 0
    }

    function createSVG() {
        var attr = {
            r: rnd(5, 10),
            "cx": rnd(0, width),
            "cy": rnd(0, height),
            "fill": "#" + (Math.random() * 16777216 | 16777216).toString(16).substr(1)
        };
        var newuse = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        Object.keys(attr).forEach(function(k) {
            newuse.setAttributeNS(null,
                k, attr[k])
        });
        container.appendChild(newuse)
    }
    btn.addEventListener("click", function () {
        [].forEach.call( container.querySelectorAll('circle'), function(el) {
             container.removeChild(el)
        });
        var num = rnd(20, 1000);
        while (num--) createSVG()
    })
});
  </script>
</body>
</html>

Рустам Гибадуллин 19.04.2017 23:33

А как сделать так, чтобы при повторном нажатии на замостить генерировалось все заново, а не накладывалось?

рони 19.04.2017 23:47

Цитата:

Сообщение от Рустам Гибадуллин
генерировалось все заново

добавлено строка 41 пост №2

Рустам Гибадуллин 20.04.2017 00:11

Рони, большое спасибо. А тот способ которым я делал совсем плох?

рони 20.04.2017 00:50

Рустам Гибадуллин,
... лучше для svg, использовать методы svg setAttributeNS createElementNS и по возможности избегать document.write ...

Рустам Гибадуллин 20.04.2017 08:48

Спасибо за совет)


Часовой пояс GMT +3, время: 10:46.