canvas交互部分
mousemove
let mouse = {
x: undefined,
y: undefined,
} // 鼠标监听事件,获取鼠标移动的相应坐标
window.addEventListener('mousemove',function(event){
mouse.x=event.x;
mouse.y=event.y;
console.log(mouse);
}); /* 创建画布 */
let canvas = document.querySelector('#canvas');
//宽高自适应
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
// 获取2d画布
let ctx = canvas.getContext('2d'); //圆的数组
let circleArray = [];
// 填充颜色
let colorArray = [
'#ffffcc',
'#ccffff',
'#ffcccc',
'#99cccc',
'#cc9999',
'#ffffcc',
'#cccc99',
'#ffff99',
'#ccccff',
];
// 封装圆的制造过程
function init(){
//循环制造不同的圆,存进数组
for(let i=0;i<400;i++){
let x = Math.random()*innerWidth;// 横坐标
let y = Math.random()*innerHeight;// 纵坐标
let r = Math.random()*3+1; // 半径
let dx = Math.random()*1; // 横向平移距离
let dy = Math.random()*1; // 纵向平移距离
circleArray.push(new Circle(x,y,r,dx,dy));
}
} // 创建一个Circle对象
function Circle(x,y,r,dx,dy) {
this.x = x;
this.y = y;
this.r = r;
this.dx = dx;
this.dy = dy;
this.minR =r;
this.bg = colorArray[Math.floor(Math.random()*colorArray.length)]; // 绘制圆
this.draw = function() {
/* 绘制样式 */
ctx.fillStyle = this.bg; // 填充属性
ctx.strokeStyle = 'black'; // 描边属性
ctx.lineWidth = 1; // 线条属性 ctx.beginPath();
ctx.arc(this.x,this.y,this.r,0,Math.PI*2,false);
ctx.fill();
}
// 更新圆的位置
this.update = function() {
// 改变圆的位子
this.x+=this.dx;
this.y+=this.dy;
// 当触及边界时
if(this.x+this.r>innerWidth || this.x-this.r<0) {
this.dx=-this.dx;
}
if(this.y+this.r>innerHeight || this.y-this.r<0) {
this.dy=-this.dy;
} // 借助鼠标监听事件,鼠标坐标与圆50px以内时,圆会增大,否则减小
if((mouse.x-this.x<50)&&(mouse.x-this.x>-50)&&(mouse.y-this.y<50)&&(mouse.y-this.y>-50)){
// 防止圆无限增大
if(this.r<40){
this.r+=1;
}
} else {
//防止出现负数
if(this.r>this.minR){
this.r-=1;
}
} // 每一次更新都要重新在一个新的地方绘制圆
this.draw();
}
} // 制造圆
init();
// 这个函数会在控制台无限输出"canvas"
function animate() {
requestAnimationFrame(animate);
// 橡皮擦函数 clearRect(x坐标,y坐标,宽度,高度)
ctx.clearRect(0,0,innerWidth,innerHeight);
// 循环刷新每个圆
for(let i=0;i<circleArray.length;i++){
circleArray[i].update();
}
}
animate();
canvas交互部分的更多相关文章
- 几十行js实现很炫的canvas交互特效
几十行js实现很炫的canvas交互特效 废话不多说,先上效果图! 本篇文章的示例代码都是抄的一个叫Franks的老外在yutube上的一个教学视频,他还出了很多关于canvas的视频,十分值得学习, ...
- canvas动画3:交互
canvas动画3 时隔很久,本人终于又写博客了(重度拖延症),把之前留下的canvas交互动画讲一讲. 电脑上的交互,指的是鼠标和键盘,我们今天主要用的是鼠标. 既然是鼠标的话,就要获取鼠标的各种事 ...
- HTML5 Canvas 绘图
首先要注意: <canvas> 元素不被一些老的浏览器所支持, 但被支持于Firefox 1.5+, Opera 9+, 新版本的Safari, Chrome, 以及Internet Ex ...
- HTML5 CANVAS 高级
加载图片 获取图像有三种方式: a : createImageData(),没有效率,一个像素一个像素的绘制: b : var img= document.getElementById("i ...
- canvas图形处理和进阶用法
前面的话 上一篇博客介绍了canvas基础用法,本文将更进一步,介绍canvas的图形处理和进阶用法 图形变换 图形变换是指用数学方法调整所绘形状的物理属性,其实质是坐标变形.所有的变换都依赖于后台的 ...
- Unity使用UGUI进行VR游戏的界面开发
原文链接:http://gad.qq.com/article/detail/7181505 本文首发腾讯GAD开发者平台,未经允许,不得转载 我不知道有多少同学是跟我一样,在开发VR游戏中,是使用的面 ...
- 学习WEB前端是应该自学还是参加培训机构?
先说观点,我强烈建议每个人都要自学,不要参加培训班. 我干web前端工程师这个职位已经有6年多的时间,之前在蚂蚁金服做过2年,后来离开是因为加班实在熬不住才走的,像这些已经上市的互联网公司几乎没有不加 ...
- ECharts-基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表
ECharts http://ecomfe.github.com/echarts 基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算 ...
- 基于HTML5 Canvas实现用户交互
很多人都有这样的疑问,基于HTML5 Canvas实现的元素怎么和用户进行交互?在这里我们用到HT for Web(http://www.hightopo.com/guide/guide/core/b ...
随机推荐
- Chapter 3 Phenomenon——17
Dr. Cullen raised his eyebrows. "Do you want to stay?" Cullen医生抬起了他的眉毛“你想待在这吗?” "No, ...
- [LeetCode]SetMatrix Zero
题目说明 Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. c ...
- Java数据库连接池原理与简易实现
1.什么是数据库连接池 我们现在在开发中一定都会用到数据库,为了提高我们的系统的访问速度,数据库优化是一个有效的途径.我们现在开发中使用数据库一般都要经历以下的四个步骤:(1)加载数据库的驱动类,(2 ...
- .Net Core使用NLog记录日志
参见:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2 大致步骤: Nuget中引用NLog及NLog ...
- 为 Nginx 创建 windows 服务自启动
1.下载最新版的 Windows Service Wrapper 程序 下载地址:http://download.java.net/maven/2/com/sun/winsw/winsw/1.9/ 2 ...
- Hive是什么
Hive是什么1)Hive 是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库:2)一种可以存储.查询和分析存储在Hadoop 中的大规模数据的机制:3)Hive 定 ...
- 生产环境部署node记录(二):pm2和nginx
安装完node和npm ,接下来安装pm2 首先简单介绍下pm2,官网的介绍是: pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进 ...
- CocoaPods管理第三方
之前听伟哥说用CocoaPods做第三方库的管理很方便,今天看了下自己做了下感觉确实不错.下面开始,Let's go!! 1.安装CocoaPods之前,先确保本地有Ruby环境,因为CocoaPod ...
- [转]COPY OR MOVE FILES AND FOLDERS USING OLE AUTOMATION
本文转自:http://sqlindia.com/copy-move-files-folders-using-ole-automation-sql-server/ I love playing aro ...
- MVC页面缓存
1.OutputCache 属性 contact.cshtml [OutputCache(Duration=10)] public ActionResult Contact() { ...