Canvas放置反弹效果随机图形(实例)
发布时间 - 2026-01-11 02:49:54 点击率:次Canvas放置反弹效果随机图形(实例)
var raf;
var arror = [];
var running = false;
//绘制圆形
function createBall() {
return {
x: 0,
y: 0,
vx: 10-Math.random()*10,
vy: 10-Math.random()*10,
radius: 25,
color:"red",
draw: function() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
}
}
}
//绘制正方形
function createSquare() {
return {
x: 0,
y: 0,
vx: 10-Math.random()*10,
vy: 10-Math.random()*10,
color:"red",
draw: function() {
ctx.beginPath();
ctx.fillStyle = this.color;
ctx.fillRect(this.x, this.y,30, 30);
ctx.closePath();
}
}
}
//绘制五角星
function createStar() {
return {
x: 0,
y: 0,
vx: 10-Math.random()*10,
vy: 10-Math.random()*10,
color:"red",
draw: function() {
ctx.font = "24px serif";
ctx.textBaseline = "hanging";
ctx.fillStyle=this.color;
ctx.fillText("五角星",this.x, this.y);
}
}
}
//绘制三角形
function createTriangle() {
return {
x: 0,
y: 0,
vx: 10-Math.random()*10,
vy: 10-Math.random()*10,
color:"red",
draw: function() {
ctx.beginPath();
ctx.moveTo(this.x,this.y);
ctx.lineTo(this.x+25,this.y+25);
ctx.lineTo(this.x+25,this.y-25);
ctx.fillStyle=this.color;
ctx.fill();
}
}
}
//清除
function clear() {
ctx.fillStyle = 'rgba(255,255,255,0.3)';
ctx.fillRect(0,0,canvas.width,canvas.height);
}
//判断图形坐标是否超出画布范围
function draw() {
clear();
arror.forEach(function(ball, i){
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
});
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener('click',function(e){
if (!running) {
raf = window.requestAnimationFrame(draw);
running = true;
}
var colorarr=["#000000","#7F7F7F","#880015","#ED1C24","#FF7F27","#FFF200","#22B14C","#00A2E8","#3F48CC","#A349A4","#B97A57","#FFAEC9","#B5E61D"];
var Graphics = ["Round","Square","Star","Triangle"];
var typexz=Graphics[Math.floor(Math.random()*4)];
var ball;
switch(typexz){
case "Round":
ball = createBall();
break;
case "Square":
ball = createSquare();
break;
case "Star":
ball = createStar();
break;
case "Triangle":
ball = createTriangle();
break;
}
ball.x = e.clientX;
ball.y = e.clientY;
ball.color = colorarr[Math.floor(Math.random() * 10 + 3)];
arror.push(ball);
});
draw();
document.addEventListener('keydown',function (e) {
if(e.keyCode==32){
event.preventDefault();
window.cancelAnimationFrame(raf);
running = false;
}
})
以上这篇Canvas放置反弹效果随机图形(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# Canvas放置反弹
# canvas实现动态小球重叠效果
# 给大家
# 角形
# 希望能
# 这篇
# 小编
# 大家多多
# closePath
# PI
# true
# createSquare
# fill
# fillStyle
# draw
# red
# arc
# beginPath
# ctx
# hanging
# textBaseline
# serif
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS管理器中快速创建并配置网站?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
音乐网站服务器如何优化API响应速度?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
详解jQuery停止动画——stop()方法的使用
如何在云主机上快速搭建多站点网站?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
焦点电影公司作品,电影焦点结局是什么?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
java ZXing生成二维码及条码实例分享
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何用美橙互联一键搭建多站合一网站?
如何快速打造个性化非模板自助建站?
Android自定义控件实现温度旋转按钮效果
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何用狗爹虚拟主机快速搭建网站?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel怎么在Controller之外的地方验证数据
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在建站宝盒中设置产品搜索功能?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
如何在 React 中条件性地遍历数组并渲染元素
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Android使用GridView实现日历的简单功能
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
大同网页,大同瑞慈医院官网?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
高端建站如何打造兼具美学与转化的品牌官网?
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何为不同团队 ID 动态生成多个非值班状态按钮
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
高防服务器租用首荐平台,企业级优惠套餐快速部署
javascript读取文本节点方法小结
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Laravel如何配置和使用缓存?(Redis代码示例)

