html5随机圆不重叠,利用canvas在一个盒子里画不重叠的圆,
1. 前言
使用canvas在一个矩形内画不重复的圆,解题思路。
2. html代码
Document
* {
margin: 0;
padding: 0;
background: #efefef;
}
.box {
width: 500px;
height: 500px;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
border: 1px solid #999;
}
$('#box').draw({
number: 50, // 圆的个数
colors: ['#FF8E56', '#00A0FF', '#0ADFCD', '#1678D3', '#00D069', '#ECB700'],
text: ['Chrome', '火狐', 'Opera', '360', '猎豹', 'safari']
});
3. circleDraw.js
(function ($) {
$.fn.extend({
draw: function (option) {
if (!option) {
option = {};
}
option = $.extend({}, $.fn.draw.defaultOption, option);
try{
if(!(option.colors instanceof Array) || !(option.text instanceof Array)){
throw Error('colors、text 接受的参数是 Array[string]');
}
}catch(e){
console.log(e.stack)
}
var that = $(this);
try{
var width = $(that).width(),
height = $(that).height();
if(!(width && height)){
throw Error('请设置宽高度');
}
}catch(e){
console.log(e.stack)
}
$(that).append("");
var obj = $(that).find('canvas')[0];
ctx = obj.getContext('2d');
var circularIndex = 0,
loopIndex = 0;
// 获取中心点的坐标和半径 x1 , y1 , r1;
try{
while (true) {
circularIndex++;
// 寻找0 - ? 之间的数值
var x = Math.floor(Math.random() * width),
y = Math.floor(Math.random() * height);
var cir = $.fn.draw.circular.effect(x , y , width , height);
if(!cir){
circularIndex --;
loopIndex++;
if(loopIndex > 500000){ // 如果循环4000+ 还没有找到合适的圆,停止,防止死循环
break;
}
continue;
}else{
var color = option.colors[circularIndex] ? option.colors[circularIndex] :
option.colors[circularIndex % option.colors.length ];
var text = option.text[circularIndex] ? option.text[circularIndex] :
option.text[circularIndex % option.text.length ];
$.fn.draw.circular.begin(cir.x , cir.y , cir.r , text , color ,ctx);
}
if (circularIndex >=option.number) { // 随机生成10个园
break;
}
}
}catch(e){
console.log(e);
}
}
});
})(jQuery);
(function ($) {
var recordArr = [];
$.fn.draw.defaultOption = {
number:5, // 生成的个数
colors: ['#FF8E56'], // 默认一个颜色,可以接受的参数是 Array
text:['Chrome']
}
$.fn.draw.circular = {
/**
x1 x轴坐标
y y轴坐标
r 半径
text 文字
color 填充颜色
**/
begin: function (x, y, r, text, color , ctx) {
recordArr.push({
x: x,
y: y,
r: r
})
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI, false);
ctx.fillStyle = color;
ctx.fill();
ctx.font = "14px Microsoft YaHei";
ctx.fillStyle = "#fffffe";
ctx.textAlign = "center";
ctx.fillText(text, x , y + 5);
ctx.closePath();
},
/**
* x 坐标
* y 坐标
* width 当前盒子宽度
* height 盒子高度
* */
effect:function (x , y , width , height) {
// 设置一个以盒子大小来计算的半径
var boxR = Math.floor(width / 6);
// 获取随机半径
var randomR = Math.floor(Math.random() * boxR);
if (randomR < 30) { // 设置半径不能低于30
return false;
} else {
// 不能划到框外
if (x + randomR > width || y + randomR > height) {
return false;
} else if (y - 2 * randomR < 0 || x - 2 * randomR < 0) {
return false;
}
// 不能出现重叠圆
for(var a = 0 ; a < recordArr.length ; a++){
var distant = Math.floor(Math.sqrt(
Math.pow(Math.abs(recordArr[a].x - x), 2) + Math.pow(Math.abs(recordArr[a].y - y), 2)
));
if(distant < randomR + recordArr[a].r){
return false;
}
}
return {
x:x,
y:y,
r:randomR
};
}
}
}
})(jQuery)
欢迎大家吐槽,如果转载请标明出处。
html5随机圆不重叠,利用canvas在一个盒子里画不重叠的圆,相关推荐
- 利用canvas实现的JS画圆圈特效代码
<body> <canvas id="myCanvas" width="1200" height="300" style ...
- img 标签 点击跳出图层_如何用PS在一个图层里画出一个会动的太极八卦图|教程...
如何用PS的加减运算做出一个标准的八卦图(超详细步骤,小白福利),首先要考虑八卦图一共用了几个圆,每个圆与每个圆之间的联系. 首先ctrl+n新建一个画板(宽和高随便设置) 用矢量工具来画八卦图,什么 ...
- 利用canvas实现田字格里写字,并适配移动端
结构: <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>我们一起学写字&l ...
- Canvas入门-利用Canvas绘制好玩的电子时钟
在这之前 你需要了解一下方法的使用: beginPath() closePath() moveTo() lineTo() fill() stroke() fillRect() clearRect() ...
- html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆
html5中怎么利用Canvas绘制椭圆 发布时间:2021-07-08 16:32:10 来源:亿速云 阅读:58 作者:Leah html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详 ...
- 在html利用canvas蚂蚁,html5 利用canvas实现简单的人物走动
最近在学习html5,其中涉及到很关键的元素canvas-画布,在网上下载了一些游戏源代码,虽然能看懂,但是想单独地针对某个功能提取出来还是有难处的,于是乎自己又上网查找了一些例子,才将超级玛丽简单的 ...
- html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能
小程序对 canvas api 跟h5的不太一致 ,所以这个搞的比较久,不多说,先贴代码 Page({ /** * 页面的初始数据 */ data: { awardsConfig: {}, resta ...
- html5 自动扣图,html5利用canvas实现颜色容差抠图功能
利用canvas的getImageData,我们可以获取到一张图片每一个像素的信息,而通过对每一个像素信息的对比,我们就可以找到需要消去的像素点.比如下面这一张图片,如果我们想要扣去白色部分(粉色是b ...
- php图片素描化,html5利用canvas实现图片转素描效果
本章给大家介绍html5如何利用canvas实现图片转素描效果.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 素描滤镜原理: 最基础的算法就是: 1.去色:(去色公式:gray = ...
最新文章
- 屠榜大杀器UniMP!百度登顶图神经网络权威榜单三项榜首
- 【Android FFMPEG 开发】FFMPEG ANativeWindow 原生绘制 ( 设置 ANativeWindow 缓冲区属性 | 获取绘制缓冲区 | 填充数据到缓冲区 | 启动绘制 )
- 高级数据结构与算法 | 二叉搜索树(Binary Search Tree)
- Xshell配置ssh免密码登录-密钥公钥(Public key)
- 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
- python自动保存图片_Python学习笔记:利用爬虫自动保存图片
- python网络编程100例_python网络编程
- 愤怒的小鸟4只编外鸟_丽萨荐书 愤怒的小鸟 Angry Birds ICR #1
- 博客园的“随笔、文章、新闻、日记”有啥区别
- jQuery.noConflict() 解决冲突 原理深入
- Javascript特效:进度条
- ping,python实现批量ping包工具--小案例v4优化版本
- OpenStack Queens版本Barbican项目介绍
- PicGo配置阿里云OSS
- 字符数组动态开辟空间和静态开辟空间
- 论文导读:TOWARDS END-TO-END SPOKEN LANGUAGE UNDERSTANDING
- Cesium设置三维球的视角和位置(中心点)
- 化学计算机专业就业方向,女生就读数学专业、计算机类或化学专业怎么样?考研方向,就业前景?...
- Java编程思想之对象入门
- 封装composer包包