canvas拖拽效果
canvas拖拽和平时用的js拖拽是有区别的
普通的js是设置目标为绝对定位,再根据鼠标的移动来改变left和top的值
canvas是获得了鼠标的位置,直接在目标点进行重新绘制
下面给一个简单的拖拽代码
- <canvas id="can" width="400" height="400"></canvas>
- <script type="text/javascript">
- var can = document.getElementById("can");
- var ctx = can.getContext("2d");
- //初始化一个圆
- createBlock(50,50);
- //创建圆滑块
- function createBlock(a,b){
- ctx.beginPath();
- ctx.fillStyle = "red";
- ctx.arc(a,b,30,0,Math.PI*2);
- ctx.fill();
- }
- //鼠标按下,将鼠标按下坐标保存在x,y中
- can.onmousedown = function(ev){
- var e = ev||event;
- var x = e.clientX;
- var y = e.clientY;
- drag(x,y);
- };
- //拖拽函数
- function drag(x,y){
- // 按下鼠标判断鼠标位置是否在圆上,当画布上有多个路径时,isPointInPath只能判断最后那一个绘制的路径
- // sPointInPath判断点是不是在路径中
- // 如果鼠标的坐标x,y是在圆上,则拖动
- if(ctx.isPointInPath(x,y)){
- //路径正确,鼠标移动事件
- can.onmousemove = function(ev){
- var e = ev||event;
- var ax = e.clientX;
- var ay = e.clientY;
- //鼠标移动每一帧都清楚画布内容,然后重新画圆
- ctx.clearRect(0,0,can.width,can.height);
- createBlock(ax,ay);
- };
- //鼠标松开事件
- can.onmouseup = function(){
- can.onmousemove = null;
- can.onmouseup = null;
- };
- };
- }
- </script>
canvas拖拽效果的更多相关文章
- jQuery的DOM操作实例(2)——拖拽效果&&拓展插件
一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- canvas 拖拽实现
Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果图像 最适合图像密集型的游戏,其中的许多对象会被频繁重绘 SVG 不依赖分辨率 支持事件处理器 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- WinForm支持拖拽效果
有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...
- js div浮动层拖拽效果代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- JQ实现3D拖拽效果
<!DOCTYPE HTML> <html onselectstart='return false'> <head> <meta http-equiv=&qu ...
- 用JS实现版面拖拽效果
类似于这样的一个版面,点击标题栏,实现拖拽效果. 添加onmousedown事件 通过获取鼠标的坐标(clientX,clientY)来改变面板的位置 注意:面板使用绝对定位方式,是以左上角为参考点, ...
随机推荐
- JDBC preparedStatement分页和统计,批处理和事务
一个类:DriverManager 四个接口:Connection.PreparedStatement .ResultSet.Statement 连接不上数据库出错的原因 1.数据库监听服务的配置不正 ...
- Linux - DDOS检测
netstat netstat -na #显示所有连接到服务器的活跃的网络连接 netstat -an | grep : | sort # 只显示连接到80段口的活跃的网络连接,80是http端口, ...
- c# 匿名函数
int t(){ Func<int> m=()=>3; return m()+m();}
- luogu P3191 [HNOI2007]紧急疏散EVACUATE
传送门 qwq这题好大力 首先可以预处理出每个人到每个门前面那个格子的最早时间,然后答案如果比最小答案大的话也是合法的,所以可以二分最终答案.检查\(mid\)是否合法就考虑每个人要去哪个门才会合法, ...
- hashMap之jdk1.7和jdk1.8
参考链接: http://allenwu.itscoder.com/hashmap-analyse https://tech.meituan.com/java-hashmap.html
- python - class内置方法 doc/module/del(析构方法)/cal 方法
__doc__ # __doc__ #摘要信息 #这个属性不会继承给子类 class Test(): """这是摘要信息""" pass x ...
- 终端命令行开启和关闭mac隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.apple.finde ...
- 2017-2018-2 165X 『Java程序设计』课程 助教总结
2017-2018-2 165X 『Java程序设计』课程 助教总结 本学期完成的助教工作主要包括: 编写300道左右测试题,用于蓝墨云课下测试: 发布博客三篇:<2017-2018-2 165 ...
- GNU/Linux的GNU是什么意思
这个组织中黑客云集,而且多是掌握核心技术的真正高手,他们的作品多是编译器.词法/语法分析器.底层函数库等大作.更重要的不是他们的技术,而是他们的哲学!他们的哲学就是技术上的“共产主义”——人人为我,我 ...
- C++学习7-面向对象编程基础(多态性与虚函数、 IO文件流操作)
多态 多态性是指对不同类的对象发出相同的消息将返回不同的行为,消息主要是指类的成员函数的调用,不同的行为是指不同的实现: 函数重载 函数重载是多态性的一种简单形式,它是指允许在相同的作用域内,相同的函 ...