先说说用到的两个方法:
1、isPositonInPath(x,y):判断(x,y)是否在canvas绘制的图形所在路径中。不太理解的可以参考W3School中的“HTML5 canvas isPointInPath() 方法”
2、getBoundingClientRect():这个方法用来用来获取元素位置,即获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置。getBoundingClientRect是DOM元素到浏览器可视范围的距离(不包含文档卷起的部分)。该函数返回一个Object对象,该对象有6个属性:top,lef,right,bottom,width,height;这里的top、left和css中的理解很相似,width、height是元素自身的宽高,但是right,bottom和css中的理解有点不一样。right是指元素右边界距窗口最左边的距离,bottom是指元素下边界距窗口最上面的距离。
然后说说要实现的效果:
在canvas中绘制20个小球,当鼠标点击小球时,小球变红。
具体思路:先在canvas中绘制20个小球,然后在原来小球的位置处再绘制一遍小球但是不填充颜色,再根据鼠标点击的坐标判断是否在某个小球的绘制范围内,若在其中就将小球填充为红色,否则不填充。
具体html页面与以前的相同,这里就不多说了,直接上JS代码:
var ball = [];//用来存放小球 var canvas = null;//用来存放canvas对象,方便后面方法调用 var context2 = null;//用来存放context对象,方便后面方法调用 window.onload=function(){ var myCanvas = document.getElementById("myCanvas"); if(myCanvas.getContext("2d")){ myCanvas.width = document.documentElement.clientWidth-20; myCanvas.height = document.documentElement.clientHeight-20; var context =myCanvas.getContext("2d"); canvas = myCanvas; context2 = context; //生成20个小球 var aBall=null; for(var i=0;i<20;i++){ aBall={ x:Math.random()*myCanvas.width, y:Math.random()*myCanvas.height, r:Math.random()*50+10 } ball[i]=aBall;//添加到数组中 } //在canvas中绘制小球 drawBall(context); //添加事件:mouseup myCanvas.addEventListener("mouseup",detect); }else{ return false; } } //该方法用来绘制小球 function drawBall(cxt){ for(var i=0;i<ball.length;i++){ cxt.beginPath(); cxt.arc(ball[i].x,ball[i].y,ball[i].r,0,Math.PI*2); cxt.fillStyle="#058"; cxt.fill(); cxt.closePath(); } } //当鼠标点击小球时触发该事件 function detect(event){ var x = event.clientX - canvas.getBoundingClientRect().left; var y = event.clientY - canvas.getBoundingClientRect().top; //每个小球都进行判断,判断(x,y)是否在其中 for(var i=0;i<ball.length;i++){ context2.beginPath(); context2.arc(ball[i].x,ball[i].y,ball[i].r,0,Math.PI*2); //判断(x,y)是否在canvas绘制的路径中(绘制的每个图形算一个路径) if(context2.isPointInPath(x,y)){ context2.fillStyle="red"; context2.fill(); } } }
再来个更舒服点的效果:当鼠标经过某个小球时,小球变红否则小球还是原来的颜色。
实现思路与上个例子相同,代码除触发时间不一样之外其他都一样,因此雷同代码就不在赘述了。这里只粘贴鼠标经过事件及处理方法:
//添加事件:mouseover myCanvas.addEventListener("mousemove",detect2); //当鼠标经过小球时触发该事件 function detect2(event){ var x = event.clientX - canvas.getBoundingClientRect().left; var y = event.clientY - canvas.getBoundingClientRect().top; //每个小球都进行判断,判断(x,y)是否在其中 for(var i=0;i<ball.length;i++){ context2.beginPath(); context2.arc(ball[i].x,ball[i].y,ball[i].r,0,Math.PI*2); if(context2.isPointInPath(x,y)){//在其中 context2.fillStyle="red"; }else{ context2.fillStyle="#058"; } context2.fill(); } }
最后感谢老师的分享!
相关推荐
- `drawRect()`: 绘制矩形,是Canvas的基础操作之一。 - `fillStyle` 和 `strokeStyle`:设置填充色和边框色。 - `beginPath()`, `moveTo()`, `lineTo()`: 用于路径绘制,创建图形的轮廓。 2. **图形绘制** - ...
在这个实例中,我们将学习Canvas的基本用法,包括画布的设置、文本渲染以及用户事件处理。Canvas是HTML5中的一个强大特性,允许开发者在网页上动态绘制2D图形,为网页增添丰富的视觉效果和交互性。 首先,Canvas是...
这篇博客"canvas保存为data:image扩展功能的实现"探讨了如何将Canvas的内容转化为data:image格式的图片,这是一种常见的数据URL模式,可以直接在浏览器中显示或用于网络传输。 在Web开发中,我们常常需要将用户在...
说明:Delphi6 Canvas画特效图片:颜色渐变 核心技术:DelphiTColor(R,G,B:Integer):TColor; Google搜索:inttohex(,stringtocolor(,DelphiTColor(,ColortoRGB(,垂直翻转,Bitmap
在本篇【canvas学习(十六):绘制时钟】中,我们将探讨HTML5中的Canvas API,它是Web开发中用于在网页上动态绘制图形的强大工具...通过深入理解这些概念,你可以利用Canvas API创建更复杂、交互性更强的Web图形应用。
在这个“html5 canvas交互式数据图表插件代码”中,我们可以深入学习如何利用Canvas API来实现数据可视化。 1. HTML5 Canvas基础: HTML5 Canvas是一个基于矢量图形的画布元素,通过JavaScript API来控制绘图。...
在本篇【canvas学习(二):弹跳小球】中,我们将深入探讨HTML5的Canvas元素以及如何利用它来创建动态的、交互式的弹跳小球效果。Canvas是HTML5的一个重要特性,允许开发者在网页上进行动态图形绘制,为网页增添了...
在canvas学习中,图形透明及交叠效果是两个重要的概念,它们可以让我们创建出丰富的视觉效果和动态交互。本文将详细解析这两个知识点,并通过提供的标签和文件名来具体阐述。 首先,我们来看“图形透明”这个概念。...
Canvas.ts选择Node.js作为基础,意味着开发者可以使用熟悉的JavaScript语法来处理与Canvas LMS的交互,大大降低了学习曲线。 Canvas LMS的API则是一套用于与系统进行数据交换的接口。通过API,开发者可以实现自动化...
Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、...
包含的有:...当浏览器不支持Canvas时,将采用Flashcanvas或ExplorerCanvas技术代替实现。以下浏览器能够很好的支持该脚本:Firefox 3.5+, Google Chrome, Opera新的版本, IE9以上的浏览器。
本书是Canvas的畅销图书,它在上一版的基础上,通过讲解如何开发可交互式多媒体应用,引导读者学习HTML5 Canvas。通过本书,你将学到如何使用Canvas进行绘图、渲染文字、处理图像、创建动画,而这些是开发交互式Web...
2. background(字符串类型,默认为"#fff"):Canvas的背景颜色,如果DOM中未指定则默认透明。 3. proxy(字符串类型,默认为undefined):跨域图片加载时使用的代理地址,如果留空则不会加载跨域图片。 4. ...
- **绘图上下文**:Canvas API主要通过`<canvas>`元素和它的`2d`绘图上下文来操作,这个上下文提供了一系列方法用于画线、填充形状、绘制图像等。 - **坐标系统**:Canvas的坐标系统以左上角为原点,X轴向右,Y轴...
低版本HTML2canvas 前端开发 生成海报 截图等功能 1.该脚本允许您直接在用户浏览器上对网页或其部分进行“截图”。屏幕截图基于 DOM,因此可能不是 100% 准确到真实表示,因为它不会制作实际的屏幕截图,而是根据...
在本文中,我们将深入探讨如何使用HTML5 Canvas和JavaScript实现鼠标粒子交互式特效。这个特效允许用户自定义粒子的数量、...通过不断学习和实践,开发者可以进一步扩展这些效果,创建出更多令人惊叹的交互式网页元素。
OpenLayers 是一个强大的开源JavaScript库,用于在Web浏览器中创建交互式的地图应用。它支持多种数据源和图层类型,包括矢量数据。在OpenLayers中,你可以利用`ImageCanvas`策略来动态加载和渲染矢量元素。这种方法...
在微信小程序中,Canvas是一个非常重要的组件,它允许开发者在页面上进行动态绘图,创建丰富的交互体验。这个"小程序canvasDemo"项目就是一个用于展示如何使用canvas功能的实例。在这个项目中,我们将深入探讨以下几...
**WPF经典教程之Canvas布局** Canvas是WPF中一种特殊的布局控件,它允许开发者对子元素进行绝对定位。在Canvas中,每个子元素的位置是通过设置`Canvas.Left`、`Canvas.Right`、`Canvas.Top`和`Canvas.Bottom`属性来...
HTML Canvas 学习过程中的一些代码HTML Canvas 学习过程中的一些代码 HTML Canvas 学习过程中的一些代码HTML Canvas 学习过程中的一些代码 HTML Canvas 学习过程中的一些代码HTML Canvas 学习过程中的一些代码 ...