canvas里的图像不支持自定义事件,多少给编程带来点麻烦,好在有context.isPointInPath(x,y)方法,利用它可以判断给定的左边是否在当前路径中.当鼠标事件发生时,对现有的图形进行重绘,调用此方法进行判断,就可以知道点击的是哪个图形了.
多余的不说了,看看关键代码
$(function(){
g_shapes = []; //保存所有图形
var rect = $("#dia")[0].getBoundingClientRect();
var tPoint = {"x":rect.left,"y":rect.top}; //canvas位置
ctx = $("#dia")[0].getContext("2d");
var c1 = new shape("c1",100,300);
c1.click = function(e){
alert(this.name+" was clicked at "+e.x+","+e.y);
}
var c2 = new shape("c2",400,300,"#800040");
c2.click = function(e){
alert(this.name+" was clicked at "+e.x+","+e.y);
}
$("#dia").click(function(env){
var point = {"x":env.pageX-tPoint.x,"y":env.pageY-tPoint.y};
for(var i=0;i<g_shapes.length;i++){
g_shapes[i].reDraw(point);
}
}).mousemove(function(env){
var point = {"x":env.pageX-tPoint.x,"y":env.pageY-tPoint.y};
$("#pp").html(point.x+","+point.y);
});
});
function shape(name,x,y,color){
this.name = name;
this.click = null;
this.x = x;
this.y = y;
this.r = 40
this.color = color || "#000000";
ctx.beginPath();
ctx.moveTo(this.x, this.y - this.r);
ctx.arc(this.x, this.y, this.r, 2 * Math.PI, 0, true);
ctx.fillStyle = color;
ctx.fill();
ctx.closePath();
g_shapes.push(this);
}
shape.prototype.reDraw = function(point){
ctx.beginPath();
ctx.fillStyle = this.color;
ctx.arc(this.x, this.y, this.r, 2 * Math.PI, 0, true);
if (ctx.isPointInPath(point.x,point.y)) {
$("#console").append("<li>"+this.name+" was clicked"+"</li>");
this.click.call(this,point);
}
ctx.closePath();
}
shape.prototype.click = function(fn){
this.click = fn;
}
分享到:
相关推荐
基于canvas的鼠标绘制矩形框的demo,多个canvas对象下支持选中,平移,删除操作,代码用VUE实现的
HTML5 Canvas不直接支持DOM事件,所以我们需要手动绑定和处理鼠标事件。主要关注`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标释放)这三个事件。 ```javascript canvas.addEventListener('...
另一种效果是按钮缩放,可以通过改变Canvas的transform属性,使得按钮在鼠标悬停时放大或缩小,同时添加适当的缓动函数,让动画更加流畅。 此外,Canvas还支持一些高级特效,如径向渐变、线性渐变、阴影效果等,...
总结,实现一个“wpf 可缩放的canvas”需要对WPF的Transform系统有深入理解,结合鼠标事件处理,以及一些用户交互的优化策略。通过ZoomableCanvas这个示例,开发者可以学习到如何创建一个自定义的、具有缩放和平移...
- **addEventListener()**:用来监听和响应鼠标事件,如`mousemove`,当鼠标移动时触发相应的动画效果。 - **event.clientX/Y**:获取鼠标事件相对于视口左上角的坐标,这对于确定光标位置至关重要。 3. **动画...
HTML5 Canvas是一个强大的Web图形接口,它允许开发者在网页上...它涵盖了图形绘制、3D变换、鼠标事件处理、以及动画原理等多个方面的知识点,对于学习Web前端开发和互动设计的开发者来说,是一个很好的学习和参考案例。
3. **交互性**:Canvas标记支持鼠标事件,如点击和悬停,使得用户可以直接与地图上的标记进行交互。这对于构建具有动态反馈的地图应用非常有用。 4. **优化的内存管理**:Canvas-Markers插件在地图移动时,只会重新...
总的来说,这个源码实例是学习HTML5 Canvas动态图形和动画的一个好例子,它展示了如何利用Canvas API创建交互式的效果,并且通过鼠标事件和动画帧更新实现随鼠标移动的动态花环。通过研究和理解这个源码,开发者可以...
在实现这些事件时,需要注意Canvas的事件处理与常规HTML元素不同,因为Canvas本身不支持直接绑定事件到其内部绘制的图形。因此,通常需要通过监听整个Canvas元素的事件,然后根据鼠标位置判断是否在特定图形区域内。...
通过批量生成DrawingVisual,我们可以提高性能,同时利用鼠标事件和上下文菜单增强用户交互。记住,实现这些功能可能需要对WPF的底层绘图和事件系统有深入的理解,但一旦掌握,将能极大地提升应用的用户体验。
在这个项目中,canvas用于创建一个可交互的签名区域,用户可以通过鼠标或触摸事件在上面绘制签名。 2. **JavaScript**: - JavaScript是实现canvas绘图的核心语言,用于处理用户的输入事件,计算坐标,以及在...
Canvas支持混合模式,例如`globalCompositeOperation`属性可以用来改变不同图形之间的混合方式。在闪电效果中,可能需要利用混合模式来创造闪电的亮度和深度感。此外,通过调整线条的`globalAlpha`属性,可以控制...
"Canvas鼠标跟随光标花环特效"是利用Canvas API创建的一种交互式动画效果,当用户移动鼠标时,光标周围会呈现出动态的花环效果,为网页增添视觉吸引力和互动性。 实现这个特效主要涉及以下Canvas相关的知识点: 1....
原生JS使用Canvas实现拖拽式绘图功能的知识点涵盖了Canvas API的基础应用、面向对象编程思想在Canvas绘图中的运用以及鼠标事件的处理,以下是详细解析: 1. Canvas API基础知识 - Canvas元素:HTML5新增的Canvas...
4. **等待图片加载**:在调用html2canvas之前,确保所有图片都已经加载完毕,或者使用`onload`事件来延迟截图操作。 5. **使用自定义渲染函数**:html2canvas允许提供自定义渲染函数,针对特定元素进行特殊处理,...
2. 绑定`mousemove`事件,获取鼠标相对于`canvas`的坐标,使用`context.lineTo()`添加新的路径点,并调用`context.stroke()`绘制线条。 3. 绑定`mouseup`事件,关闭路径(`context.closePath()`),表示绘制结束。 ...
2. **鼠标交互**:要实现交互效果,需要监听用户的鼠标事件,如`mousemove`。当鼠标在Canvas上移动时,可以通过`event.clientX`和`event.clientY`获取鼠标位置,将这些坐标用于动画效果的计算。 3. **动画原理**:...
在实现画板功能时,通常会监听用户的鼠标事件,如`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标抬起)。当鼠标按下时,记录起始坐标;在鼠标移动过程中,不断更新路径;鼠标抬起时,完成路径...
开发者会监听鼠标的移动事件(mousemove),根据鼠标的位置更新粒子的状态,如位置、速度、颜色等。JavaScript的定时器(setTimeout或requestAnimationFrame)用于控制动画的帧率,实现平滑的视觉效果。 3. **粒子...