首先想到根据在canvas上鼠标移动,然后再重新画图。但无法确定鼠标前后两次移动的距离,所以无法准确确定图像位置。

而后再根据网上的例子,定义一个div,将div覆盖在图像之上,在移动div的同时,将坐标传给canvas,重新绘制图像。

同时需要熟悉javascript各种坐标

canvas和div标签

<canvas id="myCanvas" width="500" height="400" style="border: 1px solid #c3c3c3;"></canvas>
<div id="cover" style="left: 100px; top: 100px">
</div>

css样式

 body {margin: 0;padding: 0;}div {border: solid 1px red;position: absolute;}canvas,div {position: absolute;left: 50px;top: 50px;}

同时注意将javascript代码写在html标签之后

 var canvas = document.getElementById('myCanvas');var ctx = canvas.getContext("2d");var img = new Image();img.src = "Image/jugg.jpg";ctx.drawImage(img, 50, 50);var divObj = document.getElementById('cover');divObj.style.width = img.width + 'px';divObj.style.height = img.height + 'px';var x = 0;var y = 0;var moveFlag = false;var clickFlag = false;divObj.onmousedown = function (e) {moveFlag = true;clickFlag = true;var mWidth = e.clientX - this.offsetLeft;var mHeight = e.clientY - this.offsetTop;document.onmousemove = function (e) {clickFlag = false;if (moveFlag) {divObj.style.left = e.clientX - mWidth + 'px';divObj.style.top = e.clientY - mHeight + 'px';x = e.clientX - mWidth - canvas.offsetLeft;y = e.clientY - mHeight - canvas.offsetTop;if (e.clientX <= mWidth + canvas.offsetLeft) {divObj.style.left = canvas.offsetLeft + 'px';x = 0;}if (parseInt(divObj.style.left) + divObj.offsetWidth >= canvas.width + canvas.offsetLeft) {divObj.style.left = canvas.width - divObj.offsetWidth + canvas.offsetLeft + "px";x = canvas.width - divObj.offsetWidth;}if (e.clientY <= mHeight + canvas.offsetTop) {divObj.style.top = canvas.offsetTop + "px";y = 0;}if (parseInt(divObj.style.top) + divObj.offsetHeight >= canvas.height + canvas.offsetTop) {divObj.style.top = canvas.height - divObj.offsetHeight + canvas.offsetTop + "px";y = canvas.height - divObj.offsetHeight;}drawImg();divObj.onmouseup = function () {moveFlag = false;}}}}function drawImg() {ctx.clearRect(0, 0, 500, 400);ctx.drawImage(img, x, y);ctx.stroke();}

转载于:https://www.cnblogs.com/crazyrude/p/10025683.html

canvas里图像拖拽操作相关推荐

  1. UE4 二维地图的缩放与拖拽操作

    这里写自定义目录标题 UE4 二维地图的缩放与拖拽操作 拖拽和缩放 基础搭建 添加小图标 地图缩放 地图拖拽 实现部分 效果展示 小图标的重合显示 效果展示 UE4 二维地图的缩放与拖拽操作 纯蓝图实 ...

  2. 使用jq-ui实现选中多元素进行拖拽操作

    使用jq-ui实现选中多元素进行拖拽操作 开发中为了方便用户想引入拖拽操作,但发现jq只支持单个节点拖拽,google百度了半天只有几个实现了多选拖拽了例子,但感觉不是很好用,所以干脆利用晚上时间自己 ...

  3. WPF 的拖拽操作(DragDrop)

    在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样.如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化.重要的区别是用于拖放操作的方法和事 ...

  4. [模拟拖拽] 模拟将一个文件拖拽到一个软件窗口上,实现拖拽操作(微信语音播放器)...

    "金蛇语音播放器" 是我随便写的一个假名.要实现的功能是: 我在网上下载了一个播放器,在自己公司的软件中使用,用来播放微信的语音. 因为版权问题,我不想让别人知道我用的是金蛇播放器 ...

  5. 微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)

    touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 touchend 手指触摸动作结束 拖拽操作案例1:(注意按钮 ...

  6. highchart的draggable-points.js依赖实现图表的动态拖拽操作

    highchart的draggable-points.js依赖实现图表的动态拖拽操作 需求 实现 总结 需求 实现一个曲线图,能够通过鼠标去拖拽点,来进行修改图表 实现 例子基于vue来实现,如果是j ...

  7. 【微信小程序】可拖拽操作的“树状图”模块的制作和小程序经验的总结

    去年三月份高中同学拉我做的微信小程序,尽管可能除了高一的时候做网页写过些js以后就再也没碰过(甚至高一时因为觉得"以后肯定不会做程序员"而拒绝学习代码),但得到了"你就写 ...

  8. javascript小实例,PC网页里的拖拽(转)

    这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...

  9. html 拖放实现拼图游戏,Canvas drag 实现拖拽拼图小游戏

    博主一直心心念念想做一个小游戏-  前段时间终于做了一个小游戏,直到现在才来总结,哈哈- 以后要勤奋点更新博客! 实现原理 1.如何切图? 用之前的方法就是使用photoshop将图片切成相应大小的图 ...

  10. c# picturebox 图像拖拽和缩放

    核心步骤: ①新建Point类型全局变量mouseDownPoint,记录拖拽过程中鼠标位置: ②MouseDown事件记录Cursor位置: ③MouseMove事件计算移动矢量,并更新pictur ...

最新文章

  1. 女朋友存好多网上男明星的照片,我准备用python全部换成我的脸
  2. “腾讯看点”打响信息流的全面战争
  3. 做公益的飞秋(FeiQ)程序代码
  4. Large Memory Footprints on AIX
  5. 这样设置路由,99.9%的黑客都攻不破
  6. 如何在MyEclipse 中将工程已经删除的文件恢复过来
  7. discuzX 数据库操作类
  8. 在Linux上运行procmem和procrank
  9. java 定义接口 xml_Java接口对接二(URL方式之xml,json,form)
  10. CSDN博客下载器的使用教程
  11. 系统测试主要测试类型
  12. 3.取色精灵V2.0-非模态对话框自建消息队列、VS2008风格对话框、使用Common Controls、悬浮透明窗口、使用SLIDER控件
  13. 矩阵基础4-线性方程组详解
  14. python小学口算题库生成器_口算题自动生成的小程序-L.A.SMILE自家用软件-口算题生成下载20060207-西西软件下载...
  15. 如何实现在 Vue 中嵌入代码编辑器 ?
  16. 华为服务器怎么查看系统日志,云服务器怎么查看系统日志
  17. 【CSP-S2019模拟】09.25比赛总结
  18. 那些年,Github上的干货!
  19. html界面——button设置样式
  20. drawboard pdf拆分文件_干货 | 这是一份最全的PDF问题解决方案

热门文章

  1. 神经网络入门之DNN(一)
  2. 2021-06-23元素的排列,浮动和display
  3. c#绝对值函数图像_图像处理评价指标之模糊度、清晰度(待更新)
  4. c语言标识符等价类测试,c语言基础测试题--牧码南山招新检测题
  5. linux卸载keystone服务,OpenStack —— 认证服务Keystone(二)
  6. [Errno 256] No more mirrors to try.
  7. Hadoop之crontab与ntpd
  8. go lang chrome 爬虫 (MAC 系统)
  9. 1.1.PHP7.1 狐教程-(认识PHP 7.1)
  10. 阶段3 3.SpringMVC·_05.文件上传_4 文件上传之Springmvc方式上传代码