`
whiletrue
  • 浏览: 38204 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

让canvas 支持鼠标事件

阅读更多
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;
}
分享到:
评论
1 楼 lzzy_alex 2011-12-09  
楼主怎么木留个热线泥

相关推荐

    CANVAS实现鼠标绘制矩形框

    基于canvas的鼠标绘制矩形框的demo,多个canvas对象下支持选中,平移,删除操作,代码用VUE实现的

    html5 canvas图形事件实例之拖拽

    HTML5 Canvas不直接支持DOM事件,所以我们需要手动绑定和处理鼠标事件。主要关注`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标释放)这三个事件。 ```javascript canvas.addEventListener('...

    30种鼠标悬停按钮canvas动画特效

    另一种效果是按钮缩放,可以通过改变Canvas的transform属性,使得按钮在鼠标悬停时放大或缩小,同时添加适当的缓动函数,让动画更加流畅。 此外,Canvas还支持一些高级特效,如径向渐变、线性渐变、阴影效果等,...

    wpf 可缩放的canvas

    总结,实现一个“wpf 可缩放的canvas”需要对WPF的Transform系统有深入理解,结合鼠标事件处理,以及一些用户交互的优化策略。通过ZoomableCanvas这个示例,开发者可以学习到如何创建一个自定义的、具有缩放和平移...

    Canvas跟随鼠标光标动画特效.zip

    - **addEventListener()**:用来监听和响应鼠标事件,如`mousemove`,当鼠标移动时触发相应的动画效果。 - **event.clientX/Y**:获取鼠标事件相对于视口左上角的坐标,这对于确定光标位置至关重要。 3. **动画...

    html5 canvas鼠标拖动3D狮子动画特效.zip

    HTML5 Canvas是一个强大的Web图形接口,它允许开发者在网页上...它涵盖了图形绘制、3D变换、鼠标事件处理、以及动画原理等多个方面的知识点,对于学习Web前端开发和互动设计的开发者来说,是一个很好的学习和参考案例。

    Leaflet.Canvas-Markers-0.2.0

    3. **交互性**:Canvas标记支持鼠标事件,如点击和悬停,使得用户可以直接与地图上的标记进行交互。这对于构建具有动态反馈的地图应用非常有用。 4. **优化的内存管理**:Canvas-Markers插件在地图移动时,只会重新...

    HTML5 Canvas跟随鼠标不断变换的花环动画特效源码.zip

    总的来说,这个源码实例是学习HTML5 Canvas动态图形和动画的一个好例子,它展示了如何利用Canvas API创建交互式的效果,并且通过鼠标事件和动画帧更新实现随鼠标移动的动态花环。通过研究和理解这个源码,开发者可以...

    html5 canvas 画雷达图. 实现内部元素的click,mousemove,mouseout事件.

    在实现这些事件时,需要注意Canvas的事件处理与常规HTML元素不同,因为Canvas本身不支持直接绑定事件到其内部绘制的图形。因此,通常需要通过监听整个Canvas元素的事件,然后根据鼠标位置判断是否在特定图形区域内。...

    Canvas上批量创建可视对象(DrawingVisual)管理,获取鼠标悬浮图形状态,并控制鼠标右键快捷菜单等...

    通过批量生成DrawingVisual,我们可以提高性能,同时利用鼠标事件和上下文菜单增强用户交互。记住,实现这些功能可能需要对WPF的底层绘图和事件系统有深入的理解,但一旦掌握,将能极大地提升应用的用户体验。

    canvas生成画图签名PC移动全兼容版

    在这个项目中,canvas用于创建一个可交互的签名区域,用户可以通过鼠标或触摸事件在上面绘制签名。 2. **JavaScript**: - JavaScript是实现canvas绘图的核心语言,用于处理用户的输入事件,计算坐标,以及在...

    HTML5 Canvas 实现鼠标触发的闪电雷电袭击动画效果源码.zip

    Canvas支持混合模式,例如`globalCompositeOperation`属性可以用来改变不同图形之间的混合方式。在闪电效果中,可能需要利用混合模式来创造闪电的亮度和深度感。此外,通过调整线条的`globalAlpha`属性,可以控制...

    Canvas鼠标跟随光标花环特效.zip

    "Canvas鼠标跟随光标花环特效"是利用Canvas API创建的一种交互式动画效果,当用户移动鼠标时,光标周围会呈现出动态的花环效果,为网页增添视觉吸引力和互动性。 实现这个特效主要涉及以下Canvas相关的知识点: 1....

    原生JS使用Canvas实现拖拽式绘图功能

    原生JS使用Canvas实现拖拽式绘图功能的知识点涵盖了Canvas API的基础应用、面向对象编程思想在Canvas绘图中的运用以及鼠标事件的处理,以下是详细解析: 1. Canvas API基础知识 - Canvas元素:HTML5新增的Canvas...

    html2canvas案例

    4. **等待图片加载**:在调用html2canvas之前,确保所有图片都已经加载完毕,或者使用`onload`事件来延迟截图操作。 5. **使用自定义渲染函数**:html2canvas允许提供自定义渲染函数,针对特定元素进行特殊处理,...

    canvas实现按住鼠标移动绘制出轨迹的示例代码

    2. 绑定`mousemove`事件,获取鼠标相对于`canvas`的坐标,使用`context.lineTo()`添加新的路径点,并调用`context.stroke()`绘制线条。 3. 绑定`mouseup`事件,关闭路径(`context.closePath()`),表示绘制结束。 ...

    Canvas交互式三角形动画特效.zip

    2. **鼠标交互**:要实现交互效果,需要监听用户的鼠标事件,如`mousemove`。当鼠标在Canvas上移动时,可以通过`event.clientX`和`event.clientY`获取鼠标位置,将这些坐标用于动画效果的计算。 3. **动画原理**:...

    canvas实现的画板

    在实现画板功能时,通常会监听用户的鼠标事件,如`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标抬起)。当鼠标按下时,记录起始坐标;在鼠标移动过程中,不断更新路径;鼠标抬起时,完成路径...

    Canvas鼠标移动粒子动画特效.rar

    开发者会监听鼠标的移动事件(mousemove),根据鼠标的位置更新粒子的状态,如位置、速度、颜色等。JavaScript的定时器(setTimeout或requestAnimationFrame)用于控制动画的帧率,实现平滑的视觉效果。 3. **粒子...

Global site tag (gtag.js) - Google Analytics