关于canvas 的基础知识就不多说了,可以进这个网址学习

http://www.w3school.com.cn/html5/html_5_canvas.asp

对于canvas 和 SVG 其实一开始个人是比较倾向于SVG多一点,不过后来工作需要,又学习了下canvas, 
这两个之间主要不同是 canvas是在JavaScript中绘制,SVG则是在 XML 绘制

其实canvas 主要的工作就是绘制图像,图表之类的工作,对于一些可操作的特效个人还是更喜欢用canvas + div 来实现; 
如果不是特别难的需求能做到尽量做<( ̄︶ ̄)↗[GO!]

列出一个demo 这个主要功能就是canvas 内图片拖拽 
(想要拖拽什么可以直接更换JavaScript 中第3、4、5句);

说是拖拽,但也只是目测看起是 “像”是,其实在每次鼠标移动的时候都会先清掉之前画好的,再在鼠标所在的位置重新绘制一个,全套demo如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         body,div{
 8             margin:0;
 9             padding:0;
10         }
11         #d1{
12             width:500px;
13             height: 400px;
14             border: 2px solid #00FFD1;
15         }
16     </style>
17 </head>
18 <body>
19
20
21 <div id="d1">
22     <canvas id="myCanvas" width="500" height="400">
23         <p>您的系统不支持此程序!</p>
24     </canvas>
25 </div>
26
27 <script>
28     const canva=document.getElementById("myCanvas");
29     const cansText=canva.getContext("2d");
30
31     let img = new Image();
32     img.src="http://www.w3school.com.cn/i/ct_html5_canvas_circle.gif";
33     cansText.drawImage(img,50,50,150,100);
34     //在事件外声明需要用到的变量
35     let ax,ay,x,y;
36
37     canva.οnmοusedοwn=function (e) {
38
39         canva.onmousemove = function(e){
40              x= e.clientX;y=e.clientY;
41
42             //限制移动不能超出画布
43             (x<173)? ax=75 : ax=425;
44             (y<148)? ay=50 : ay=350;
45
46             (x < 425 && x >75)? x =e.clientX : x =ax;
47
48             (y > 50 && y <350) ? y=e.clientY : y=ay;
49
50             //先清除之前的然后重新绘制
51             cansText.clearRect(0,0,canva.width,canva.height);
52
53             cansText.drawImage(img,x-75,y-50,150,100);
54         };
55
56         canva.onmouseup = function(){
57             canva.onmousemove = null;
58             canva.onmouseup = null;
59         };
60     }
61
62 </script>
63 </body>
64 </html>

补充:点击图片非中心移动时,会自动跳动到,图片以当前光标为中心

原链:https://blog.csdn.net/freedomVenly/article/details/79042536

转载于:https://www.cnblogs.com/7qin/p/9615406.html

HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动相关推荐

  1. HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动

    关于canvas 的基础知识就不多说了,可以进这个网址学习 http://www.w3school.com.cn/html5/html_5_canvas.asp 对于canvas 和 SVG 其实一开 ...

  2. html5限制拖拽区域怎么实现,html5怎么实现拖拽

    html5实现拖拽的方法:首先新建一个空的HTML5结构:然后在body元素中放置一个div:最后通过allowDrop,drag和drop三个函数实现拖拽功能即可. 本文操作环境:Windows7系 ...

  3. 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素

    介绍 HTML5 提供了专门的拖拽与拖放的 API,目前各浏览器都已支持,包括 IE.HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能.例如,用户可使用鼠标选择可拖 ...

  4. html5 canvas手写画板 下载图片至本地

    html5 canvas手写画板 下载图片至本地 <!DOCTYPE html> <html><head><meta charset="utf-8& ...

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

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

  6. php网页画线,HTML5 canvas基本绘图之绘制线条

    是HTML5中新增的标签,用于绘制图形,这篇文章主要为大家详细介绍了HTML5 canvas基本绘图之绘制线条方法,感兴趣的小伙伴们可以参考一下 是HTML5中新增的标签,用于绘制图形,实际上,这个标 ...

  7. Android 7.0 分屏拖拽文字和图片的研究

    一 前提 二 实测一 三 实测二 四 分析 1 分屏拖拽实现分析-Activity间 ViewstartDragAndDrop 实现拖拽图片的例子 2 拖拽实现分析-Activity内 一. 前提 1 ...

  8. HTML5原生拖拽/拖放 Drag Drop 详解

    转载自:juejin.im/post/5a169d- 前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准 ...

  9. HTML5原生拖拽/拖放(drag drop)详解

    前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准的一部分.我从几个方面学习并实践这个功能. 拖放的流程 ...

最新文章

  1. Linux System Programming --Chapter Five
  2. Flash as3 以鼠标点为中心缩放效果
  3. 《一江春水向东流》——任正非
  4. 实时远程医学影像服务质量保障与网络优化
  5. like效率 regexp_Oracle 中like效率 正则表达式 浅析
  6. tomcat配置多站点
  7. IE11浏览器一个窗口打开多个页面设置方法
  8. AppDelegate 方法介绍
  9. Python求梅森尼数
  10. python编写米字格的步骤_2分钟学会在Word中制作田字格 米字格 书法练字再也不用买本子了...
  11. windows下cmd 查找/关闭端口
  12. KALI安装软件链接不上源,数字签名软件保护,Kali Linux 更新源 数字签名无效处理
  13. Towards Playing Full MOBA Games with Deep Reinforcement Learning翻译
  14. 打字教程新手篇-指法练习的重要性和注意事项
  15. 无人机组装调试步骤(保姆级别教程)
  16. Java与Unix时间戳的相互转换
  17. 零售转型之战,“富二代”平安银行胜算如何?
  18. 全要素分析与问题解决:以人为本,主次分明
  19. 安装Office2010提示需要安装MSXML版本6.10.1129.0的解决方法,超简单,亲测可用
  20. C++数据库编程 MySQL Connecttor C++增删改查

热门文章

  1. 马里兰大学calce电池循环测试数据集_Nature系列/Joule/Angew/EES超强盘点:水体系电池10大热点论文及发文趋势...
  2. python求高阶导数_python – TensorFlow:计算Hessian矩阵(和更高阶导数)
  3. 为确保网络中不同计算机,在计算机网络中,为确保网络中不同计算机之间能正确地传送和接收数据,它们必须遵循一组共同的规则和约定。这些规则、约定或标准通常被称为____。...
  4. Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式
  5. Exception处理
  6. ThreadLocalConnection
  7. mapxtreme java 版本分布式部署。自己的应用和mapxtreme渲染器不在同一台机器上
  8. 利用哈希map快速判断两个数组的交集
  9. OpenBSD 现已支持 USB 3.0
  10. iOS开发 - 利用js去除webview广告