JavaScript结合Canvas绘画画运动小球

目录
  • 1.实现思路
  • 2.静态效果
  • 3.总结

前言:

canvas是HTML5新增的元素,也被称为画布,可以结合javascript实现绘制各种图形,制作各种炫酷的动画效果,现在我们也来使用canvas画随机运动小球。

1.实现思路

  • 首先为了达到我们想要的效果,可以先创建一个构造函数。
  • 给构造函数添加对应的属性和方法。
  • 实例化出多个对象,并且保存在数组中。
  • 遍历每个对象,实现画圆。
  • 间隔修改每个球的x,y值。

先准备画布确定对应的宽高:

<canvas id="canvas" width="400" height="400"></canvas>
<script>
    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
    let maxWidth = canvas.width,
        maxHeight = canvas.height;
        ctx.fillStyle = '#000';
        ctx.fillRect(0, 0, maxWidth, maxHeight);
</script>

因为是随机运动,所以要创建一个获取随机数的方法:

function getRandomNum(minNum, maxNum) {
    switch (arguments.length) {
        case 1:
            return Math.round(Math.random() * minNum + minNum);
            break;
        case 2:
            return Math.round(
                Math.random() * (maxNum - minNum) + minNum);
            break;
        case 0:
            return 0;
            break;
    }
}
// 创建一个Ball的构造函数
    function Ball(maxWidth, maxHeight, ctx) {
        this.ctx = ctx;
        this.maxWidth = maxWidth;
        this.maxHeight = maxHeight;
        // 随机半径
        this.r = getRandomNum(5, 15);
        // 随机x,y坐标
        this.x = getRandomNum(this.r, this.maxWidth - this.r);
        this.y = getRandomNum(this.r, this.maxHeight - this.r);
        // 平移速度,正负区间是为了移动方向多样
        this.speedX = getRandomNum(-2, 2);
        this.speedY = getRandomNum(-2, 2);
        // 颜色随机
        this.color = `rgba(${getRandomNum(0, 255)},
        ${getRandomNum(0, 255)},
        ${getRandomNum(0, 255)},${Math.random()})`;
    }
    Ball.prototype = {
        draw: function () {
            ctx.beginPath();
            ctx.fillStyle = this.color;
            ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
            ctx.fill();
            ctx.closePath();
        },
        move: function () {
            // 判断边界值,让圆球始终保证在画面内
            if (this.x > this.maxWidth - this.r || this.x < this.r) {
                this.speedX = -this.speedX;
            }
            if (this.y > this.maxHeight - this.r || this.y < this.r) {
                this.speedY = -this.speedY;
            }
            this.x += this.speedX;
            this.y += this.speedY;
        }
    };
    // 创建100个Ball实例
    let balls = [];
    for (let i = 0; i < 100; i++) {
        let newBall = new Ball(maxWidth, maxHeight, ctx);
        newBall.draw();
        balls.push(newBall);
    }

2.静态效果

现在我们画出了不同半径和颜色的静止圆球:

调用move方法,间隔修改每个球的x,y值。

setInterval(() => {
    // 每次画之前都要清除画布
    ctx.clearRect(0, 0, maxWidth, maxHeight);
    ctx.fillStyle = '#000';
    ctx.fillRect(0, 0, maxWidth, maxHeight);
    for (let j = 0; j < 100; j++) {
        balls[j].draw(ctx);
        balls[j].move();
    }
}, 100);

效果展示:

3.总结

canvas强大的绘图能力可以使网页的内容更加丰富多彩,给用户带来更好的视觉效果和和交互体验,掌握一些功能的使用可以让我们的项目更好的理解与canvas相关的框架使用,也能够创建丰富的web应用,同时也要求我们更好的掌握

到此这篇关于JavaScript结合Canvas画运动小球的文章就介绍到这了,更多相关JS与Canvas画运动小球内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JS+canvas画一个圆锥实例代码

    以下是我们给大家分享是实例代码: <html> <head> <title>我的第一个 HTML 页面</title> </head> <body> <canvas id='cvs' width='1000' height="800"> </canvas> <script> const cvs =document.getElementById('cvs'); // 计算画布的宽度

  • JavaScript canvas动画实现时钟效果

    本文实例为大家分享了canvas动画实现时钟效果的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta

  • js+canvas实现画板功能

    本文实例为大家分享了js+canvas实现画板功能的具体代码,供大家参考,具体内容如下 1.实现了画图,改变画笔粗细,改变画笔颜色,清屏功能 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>画板</title> <link rel="shortcut icon" type="image/x-icon&qu

  • JS canvas实现画板和签字板功能

    本文实例为大家分享了JS canvas实现画板/签字板功能的具体代码,供大家参考,具体内容如下 前言 常见的电子教室里的电子黑板. 本文特点: 原生JS 封装好的模块 最简代码样例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content=&

  • JS使用canvas绘制旋转风车动画

    使用canvas绘制动画-旋转风车加速减速启动停止. 结果截图详见如下: 源码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

  • js canvas画布实现高斯模糊效果

    最近项目中有一个需求是实现图片的局部模糊效果,看上去一个挺难的效果.在实现局部模糊效果前,首先能够实现全部模糊.经过和度娘的一番较劲后,找到了一个不错的案例,然后在他的基础上,经过一番修改,和备注,实现了当前的案例: <!doctype html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" cont

  • JavaScript canvas实现围绕旋转动画

    使用canvas的convas来实现围绕旋转动画,外圈顺时针,里层逆时针 代码demo链接地址:代码demo链接地址 html文件 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> body { margin: 0; padding: 0; overflow:

  • JS Canvas接口和动画效果大全

    概述 <canvas>元素用于生成图像.它本身就像一个画布,JavaScript通过操作它的 API,在上面生成图像.它的底层是一个个像素,基本上<canvas>是一个可以用JavaScript操作的位图(bitmap). 它与 SVG 图像的区别在于,<canvas>是脚本调用各种方法生成图像,SVG 则是一个 XML 文件,通过各种子元素生成图像. 使用 Canvas API 之前,需要在网页里面新建一个<canvas>元素. <canvas id

  • JavaScript结合Canvas绘画画运动小球

    目录 1.实现思路 2.静态效果 3.总结 前言: canvas是HTML5新增的元素,也被称为画布,可以结合javascript实现绘制各种图形,制作各种炫酷的动画效果,现在我们也来使用canvas画随机运动小球. 1.实现思路 首先为了达到我们想要的效果,可以先创建一个构造函数. 给构造函数添加对应的属性和方法. 实例化出多个对象,并且保存在数组中. 遍历每个对象,实现画圆. 间隔修改每个球的x,y值. 先准备画布确定对应的宽高: <canvas id="canvas" wi

  • jQuery实现的分子运动小球碰撞效果

    本文实例讲述了jQuery实现的分子运动小球碰撞效果.分享给大家供大家参考,具体如下: 先看效果图吧,因为小球是运动状态的,不好截图,这里就先大体画了一下路线,表示大体意思吧,如果想看真实的效果,自己粘贴下去运行: 小球有点小哟,嘿嘿,没有对细节进行详细的处理,如果像让它完美一点,自己处理下吧!这里是模拟的理想状态下的,没有摩擦力与组里的分子碰撞运动,高科技哟~~~~~~mu~a 代码也没有整理,如果有心的话,把它整理成面向对象形式的吧! 代码如下: <!DOCTYPE html PUBLIC

  • JavaScript html5 canvas绘制时钟效果

    本文实例讲述了JavaScript+html5 canvas绘制时钟效果.分享给大家供大家参考,具体如下: HTML部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0

  • JavaScript+HTML5 canvas实现放大镜效果完整示例

    本文实例讲述了JavaScript+HTML5 canvas实现放大镜效果.分享给大家供大家参考,具体如下: 效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>www.jb51.net canvas放大镜</title> <style> #copycanvas { border: 1px

  • javascript+HTML5 canvas绘制时钟功能示例

    本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>www.jb51.net canvas绘制时钟</title> <style> div{text-align:cent

  • JavaScript使用canvas绘制坐标和线

    本文实例为大家分享了JavaScript使用canvas绘制坐标和线的具体代码,供大家参考,具体内容如下 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>在指定位置画多个点</title> <style> canvas{ border: 1px dashed gray; } &

  • JavaScript利用Canvas实现粒子动画倒计时

    目录 canvas 粒子动画介绍 何为canvas 粒子动画是啥 canvas 定义初始变量 初始化canvas和数字文本 创建一定数量的点 倒计时 倒计时文本绘画 循环绘制 点动画 效果图 canvas 粒子动画介绍 何为canvas canvas是HTML5中新增的一个标签,主要是用于网页实时生成图像并可操作图像,它是用JavaScript操作的bitmap. 粒子动画是啥 粒子动画就是页面上通过发射许多微小粒子来表示不规则模糊物体,比如:用小圆点来模拟下雪.下雨的效果,用模糊线条模拟黑客帝

  • JavaScript利用canvas绘制流星雨效果

    目录 前言 需求分析 实现过程 1.绘制满天繁星 2.满天繁星闪起来 3.绘制流星 4.流星划过夜空 5.流星雨 6.merge视觉盛宴 前言 最近总是梦见一些小时候的故事,印象最深刻的就是夏天坐在屋顶上,看着满天的繁星,一颗,两颗,三颗...不由自主地开始了数星星的过程.不经意间,一颗流星划过夜间,虽然只是转瞬即逝,但它似乎比夜空中的其它繁星更吸引着我.听老人说,看见流星的时候许愿,愿望是可以实现的,此时早已把数星星抛之脑后,开始期待着下一颗流星的出现.但是那天晚上,流星再也没有出现,这也成了

  • JavaScript利用canvas实现鼠标跟随特效

    目录 前言 创建canvas画布 定义鼠标 x / y 初始化canvas 画箭头 循环动画 鼠标事件 前言 canvas是一个很神奇的玩意儿,比如画表格.画海报图都要用canvas去做,前几天有用css去做一个鼠标跟随的恶魔之眼的动画效果,想着能不能用canvas也做一个鼠标跟随的效果呢? 创建canvas画布 canvas画布创建可以直接用canvas标签即可 <canvas></canvas> 也没有过多的样式,基本都是用js去完成画布中的内容的 const canvas =

  • 原生JavaScript编写canvas版的连连看游戏

    本文实例为大家分享了JavaScript编写canvas版的连连看游戏的具体实现代码,供大家参考,具体内容如下 效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #box{ /*border: 1px solid #D1D1D1; */ overflow: hidden; pos

随机推荐