canvas背景效果:

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title></title>
</head> <body>
<canvas id="canvas" width="" height=""></canvas>
</body>
<script>
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let w = canvas.width = canvas.offsetWidth;
let h = canvas.height = canvas.offsetHeight;
let circles = []; function rand(min, max) {
return parseInt(Math.random() * (max - min + ) + min);
} class Circle {
constructor() {
this.r = rand(, );
let x = rand(, canvas.width - this.r);
let y = rand(, canvas.height - this.r);
this.x = x < this.r ? this.r : x;
this.y = y < this.r ? this.r : y; let speed = rand(, );
this.speedX = rand(, ) > ? speed : -speed;
this.speedY = rand(, ) > ? speed : -speed;
} drawCircle(ctx) {
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, , );
ctx.closePath();
ctx.fillStyle = 'rgba(204,204,204,0.3)';
ctx.fill();
} drawLine(ctx, _circle) {
let dx = this.x - _circle.x;
let dy = this.y - _circle.y;
let d = Math.sqrt(dx * dx + dy * dy);
if (d < ) {
ctx.beginPath();
ctx.moveTo(this.x, this.y);
ctx.lineTo(_circle.x, _circle.y);
ctx.closePath();
ctx.strokeStyle = 'rgba(204,204,204,0.3)';
ctx.stroke();
}
} move(w, h) {
this.x += this.speedX / ;
if (this.x > w || this.x < ) {
this.speedX *= -;
} this.y += this.speedY / ;
if (this.y > h || this.y < ) {
this.speedY *= -;
}
}
} class curCircle extends Circle {
constructor() {
super();
} drawCircle(ctx) {
ctx.beginPath();
this.r = ;
ctx.arc(this.x, this.y, this.r, , );
ctx.closePath();
ctx.fillStyle = 'rgba(255,77,54,0.6)';
ctx.fill();
}
} let circle = new curCircle();
let draw = function () {
ctx.clearRect(, , w, h);
for (let i = ; i < circles.length; i++) {
circles[i].drawCircle(ctx);
for (j = i + ; j < circles.length; j++) {
circles[i].drawLine(ctx, circles[j]);
}
circles[i].move(w, h);
}
if (circle.x) {
circle.drawCircle(ctx);
for (let k = ; k < circles.length; k++) {
circle.drawLine(ctx, circles[k])
}
}
requestAnimationFrame(draw);
}; let init = function (num) {
for (let i = ; i < num; i++) {
circles.push(new Circle());
}
draw();
}; window.addEventListener('load', init()); canvas.addEventListener('mousemove', function (e) {
e = e || window.event;
circle.x = e.offsetX;
circle.y = e.offsetY;
}); canvas.addEventListener('mouseout', function (e) {
circle.x = null;
circle.y = null;
});
</script> </html>

canvas背景效果的更多相关文章

  1. Canvas 示例:4种超炫的网站动画背景效果

    今天,我们想分享一些动画背景的灵感.全屏背景图片的网站头部是最新的网页设计趋势,已经持续了一段时间.最近人们一直在转向动画添加更多的视觉兴趣到他们的网站中,在这里我们想向您分享几个使用  JavaSc ...

  2. 超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等

    超多经典 canvas 实例 普及:<canvas> 元素用于在网页上绘制图形.这是一个图形容器,您可以控制其每一像素,必须使用脚本来绘制图形. 注意:IE 8 以及更早的版本不支持 &l ...

  3. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  4. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  5. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  6. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  7. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  8. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  9. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

随机推荐

  1. Python3解leetcode Valid Parentheses

    问题描述: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if th ...

  2. VijosP1250:分组背包

    背景 Wind设计了很多机器人.但是它们都认为自己是最强的,于是,一场比赛开始了~ 描述 机器人们都想知道谁是最勇敢的,于是它们比赛搬运一些物品. 它们到了一个仓库,里面有n个物品,每个物品都有一个价 ...

  3. UE4 框架

    转自:http://www.cnblogs.com/NEOCSL/p/4059841.html 有很多人是从UE3 接触到Unreal,如果你也对UE3非常了解,便能很快的上手UE4.但是,UE4的开 ...

  4. 制作HUD

    转自:http://www.cnblogs.com/NEOCSL/archive/2012/03/05/2380341.html 1. HUD不仅仅能提供基本的显示信息给玩家,例如玩家的生命值等.在I ...

  5. Spring boot 学习六 spring 继承 mybatis (基于注解)

    MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,这些都是建立动态语言和让MyBatis执 ...

  6. python--环境变量的使用

    用python 环境变量取代sys.path echo -en "PYTHONPATH=$PYTHONPATH:~/demo" >>~/.bashrc export ~ ...

  7. Primer回顾 数组和指针

    数组和指针类似于vector和迭代器. 区别在于:数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以像迭代器一样用于遍历和检查数组中的元素. 设计良好的程序只有在强调速度时才在类实现的 ...

  8. wireshark里无网络接口解决办法

    管理员模式下开启npf服务,该服务能捕获网络接口,net start npf

  9. cf414B(dp)

    题目链接:http://codeforces.com/problemset/problem/414/B 题意:定义所有元素是其前一个元素的倍数的数列为good sequence,给出 n, 和 k,求 ...

  10. 洛谷P2862 [USACO06JAN]把牛Corral the Cows

    P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...