演示:

http://jsfiddle.net/m1erickson/7vmML/

示例代码:

body{ background-color: ivory; }

#canvas{border:1px solid red;}

$(function(){

var canvas=document.getElementById("canvas");

var ctx=canvas.getContext("2d");

var $canvas=$("#canvas");

var canvasOffset=$canvas.offset();

var offsetX=canvasOffset.left;

var offsetY=canvasOffset.top;

var scrollX=$canvas.scrollLeft();

var scrollY=$canvas.scrollTop();

var isDown=false;

var startX;

var startY;

var points=[];

points.push({x:10,y:10});

points.push({x:75,y:100});

points.push({x:150,y:125});

points.push({x:125,y:200});

var imageX=-200;

var imageY=-200;

var img=new Image();

img.οnlοad=start;

img.crossOrigin="anonymous";

img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house32x32transparent.png";

function start(){

drawAll();

}

function drawAll(){

ctx.clearRect(0,0,canvas.width,canvas.height);

ctx.beginPath();

ctx.moveTo(points[0].x+4,points[0].y+4)

for(var i=1;i

var pt=points[i];

ctx.lineTo(pt.x+4,pt.y+4);

}

ctx.stroke();

//

for(var i=0;i

var pt=points[i];

ctx.fillRect(pt.x,pt.y,8,8);

}

//

ctx.drawImage(img,imageX,imageY);

}

function handleMouseDown(e){

e.preventDefault();

isDown=true;

}

function handleMouseUp(e){

e.preventDefault();

isDown=false;

}

function handleMouseOut(e){

e.preventDefault();

isDown=false;

}

function handleMouseMove(e){

if(!isDown){return;}

e.preventDefault();

mouseX=parseInt(e.clientX-offsetX);

mouseY=parseInt(e.clientY-offsetY);

var minDistance=1000;

var minPoint=-1;

for(var i=0;i

var pt=points[i];

var dx=mouseX-pt.x;

var dy=mouseY-pt.y;

var distance=Math.sqrt(dx*dx+dy*dy);

if(distance

minDistance=distance;

imageX=pt.x-img.width/2;

imageY=pt.y-img.height/2;

}

}

drawAll();

}

$("#canvas").mousedown(function(e){handleMouseDown(e);});

$("#canvas").mousemove(function(e){handleMouseMove(e);});

$("#canvas").mouseup(function(e){handleMouseUp(e);});

$("#canvas").mouseout(function(e){handleMouseOut(e);});

}); // end $(function(){});

Drag mouse. Image will snap to nearest point.

请注意,此示例代码使用jQuery来侦听鼠标事件.如果您更喜欢纯JavaScript,则可以使用这些事件绑定:

canvas.οnmοusedοwn=handleMouseDown;

canvas.οnmοuseup=handleMouseUp;

canvas.οnmοuseοut=handleMouseOut;

canvas.οnmοusemοve=handleMouseMove;

你可以像这样计算鼠标位置:

function getMousePos(canvas,e) {

var rect=canvas.getBoundingClientRect();

return{ x:e.clientX-rect.left, y:e.clientY-rect.top };

}

html js坐标图,javascript – HTML5 Canvas沿着带坐标的路径拖动图像相关推荐

  1. js html 卡通 学生,JavaScript+html5 canvas绘制的小人效果

    本文实例讲述了JavaScript+html5 canvas绘制的小人效果.分享给大家供大家参考,具体如下: 运行效果截图如下: index.html代码如下: canvas中的缩放 #canvas ...

  2. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

    我们接着上文[js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...

  3. HTML弧度文本,[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)...

    canvas提供两种输出文本的方式: strokeText:描边文本 fillText:填充文本 fillStyle配合fillText使用,strokeStyle配合strokeText使用 str ...

  4. 前端画圆弧html弧线的像素,[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)...

    arc:画弧度 cxt.arc( x, y, 半径, 开始角度,结束角度,是否逆时针 ); x, y: 为弧度的中心横坐标和纵坐标,如果这是画一个圆.那么x,y就是圆的圆心. 开始角度与结束角度都是以 ...

  5. 使用html制作圆弧正方形,JavaScript+html5 canvas制作的圆中圆效果实例

    本文实例讲述了JavaScript+html5 canvas制作的圆中圆效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { background: ...

  6. html小人动画效果代码,JavaScript+html5 canvas绘制的小人效果

    本文实例讲述了JavaScript+html5 canvas绘制的小人效果.分享给大家供大家参考,具体如下: 运行效果截图如下: index.html代码如下: canvas中的缩放 #canvas ...

  7. html弧形列表效果,JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例

    本文实例讲述了JavaScript+html5 canvas绘制的圆弧荡秋千效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { margin:50 ...

  8. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例

    本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: www.jb51.net canvas绘制时钟 div{text-ali ...

  9. [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

    上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...

最新文章

  1. ORA-01113 file 1 needs media recovery
  2. dynamic modelling
  3. 动手学无人驾驶(3):基于激光雷达3D多目标追踪
  4. Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)
  5. oracle procedure可以执行非常复杂的语句吗,oracle-存储过程(procedure)
  6. 20155337 《网络对抗》 Exp2 后门原理与实践
  7. php闭包 js闭包,JavaScript闭包与PHP闭包的区别是什么?
  8. [Android]安卓简易计算器 (使用GridLayout)
  9. 计算机中文无敌版,与电脑下象棋无敌版
  10. windows eclipse超详细安装教程
  11. 【开源】STM32步进电机控制
  12. 计算机粘贴功能不能用了,电脑不能粘贴怎么回事_电脑不能粘贴了怎么解决
  13. iOS 获取手机 唯一标识
  14. 汪海Python爬虫(一)抓取网页的含义和URL基本构成
  15. HHS整合(Struts2+Spring+Hibernate)
  16. Gabor变换过程详细推导
  17. 测试学习——性能测试(一)
  18. Pr 入门教程 如何使用超级键效果?
  19. 图解2022年城市人口迁移趋势
  20. 《电子测量与仪器学报》最新投稿经验2022.9

热门文章

  1. 中的实践 中兴_中兴通讯王卫斌:一步到位 构建5G 2B新商业
  2. JSTL-EL表达式
  3. Quadratic equation(二次剩余)2019牛客多校第九场
  4. Weird Game CodeForces - 299C
  5. PAT_B_1057_Java(20分)
  6. 【计算机组成原理】十进制数串
  7. 分布式的客户端-服务器结构_MMORPG游戏服务器技术选型参考
  8. Guice使用入门以及整合Redis
  9. 太监式的自主知识产权研发特色 (Z)
  10. 统计学习方法(九)EM算法及其推广