html5随机圆不重叠,Js生成随机圆形,随机颜色,随机位置,不重叠

这篇文章主要是用来总结之前的那两篇文章的知识点,分别是《处理数组循环中删除元素导致索引错位情况》和《JavaScript规则图形碰撞原理》,还是用demo来总结来得实在,做了个生成随机圆形,随机颜色,随机位置,不重叠的小demo。demo的js代码如下:

function creatDiv(r_w){

var randomWidth=parseInt(Math.random()*r_w+50);

var allEle=document.getElementById("page467").getElementsByTagName("*");

var div=document.createElement("div");

var bottom=parseInt(Math.random()*(document.body.clientHeight-randomWidth));

var left=parseInt(Math.random()*(document.body.clientWidth-randomWidth));

div.setAttribute("class","lucky-circle");

div.setAttribute("data-left",left);

div.setAttribute("data-bottom",bottom);

div.style.bottom=bottom+"px";

div.style.left=left+"px";

div.style.backgroundColor="rgb("+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+")";

div.style.width=randomWidth+"px";

div.style.height=randomWidth+"px";

for(let i=allEle.length-1;i>0;i--){

if(allEle[i].getAttribute("data-left")){

let tLeft=parseInt(allEle[i].getAttribute("data-left"));

let tBottom=parseInt(allEle[i].getAttribute("data-bottom"));

let width=allEle[i].offsetWidth;

let height=allEle[i].offsetHeight;

let point_x_1=tLeft+width/2;

let point_y_1=tBottom+height/2;

let point_x_2=left+randomWidth/2;

let point_y_2=bottom+randomWidth/2;

let distant= Math.sqrt(Math.pow(Math.abs(point_x_1-point_x_2),2)+Math.pow(Math.abs(point_y_1-point_y_2),2));

if(distant

allEle[i].parentNode.removeChild(allEle[i]);

}

}

}

document.getElementById("page467").appendChild(div);

}

document.οnkeydοwn=function(){

creatDiv(150);

};

点击查看demo

按Esc键退出,按其它任意键生成圆。

或者到我的GitHub里面获取源码。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在HTML5中绘制多个随机并确保它们不重叠,可以采用以下步骤: 1. 首先,定义一个的类,包含心坐标(x,y)和半径(radius)属性,以及draw()方法来绘制。 2. 创建一个数组来存储所有的对象。 3. 使用一个循环来生成随机,每次循环生成一个并检查它是否与之前生成的重叠。如果重叠,则重新生成。 4. 生成一个随机心坐标和半径,然后检查它是否与数组中已有的重叠。可以使用勾股定理来计算心之间的距离,如果距离小于两个的半径之和,则认为它们重叠了。 5. 如果重叠,则将它添加到数组中,并调用它的draw()方法来绘制它。 以下是一个基本的实现示例: ```html <!DOCTYPE html> <html> <head> <title>随机</title> <style> canvas { border: 1px solid black; } </style> </head> <body> <canvas id="myCanvas" width="500" height="500"></canvas> <script> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); // 定义类 function Circle(x, y, r) { this.x = x; this.y = y; this.r = r; this.draw = function() { ctx.beginPath(); ctx.arc(this.x, this.y, this.r, 0, 2*Math.PI); ctx.stroke(); } } var circles = []; // 生成随机 function generateCircles(num) { for (var i = 0; i < num; i++) { var x = Math.random() * canvas.width; var y = Math.random() * canvas.height; var r = Math.random() * 50 + 10; var circle = new Circle(x, y, r); // 检查是否重叠 var overlap = false; for (var j = 0; j < circles.length; j++) { var distance = Math.sqrt(Math.pow(circles[j].x - x, 2) + Math.pow(circles[j].y - y, 2)); if (distance < circles[j].r + r) { overlap = true; break; } } // 如果重叠,则添加到数组中并绘制它 if (!overlap) { circles.push(circle); circle.draw(); } else { i--; } } } generateCircles(10); </script> </body> </html> ``` 在上面的示例中,我们生成了10个随机,并使用数组来存储它们。每次生成一个新时,我们都会检查它是否与数组中已有的重叠,如果重叠,则重新生成。最后,我们调用每个的draw()方法来在canvas上绘制它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值