javascript利用canvas实现鼠标拖拽功能


Posted in Javascript onJuly 23, 2020

利用canvas实现鼠标拖拽功能,当在元素上按下鼠标并移动时,元素跟着鼠标移动。

效果:

javascript利用canvas实现鼠标拖拽功能

主要思路:

当鼠标按下时,用isPointInPath方法判断鼠标位置是否在元素上,如果在则鼠标移动时元素跟着移动;当鼠标抬起时,将鼠标移动事件和抬起事件置空。

代码如下:

<canvas id="can" width="400" height="400"></canvas>
 <script type="text/javascript">
 var can = document.getElementById("can");
 var ctx = can.getContext("2d");
 //创建圆滑块
 function createBlock(a,b){
 ctx.beginPath();
 ctx.fillStyle = "red";
 ctx.arc(a,b,30,0,Math.PI*2);
 ctx.fill();
 }
 //鼠标按下,将鼠标按下坐标保存在x,y中
 createBlock(50,50);
 can.onmousedown = function(ev){
 var e = ev||event;
 var x = e.clientX;
 var y = e.clientY;
 drag(x,y);
 };
 //拖拽函数
 function drag(x,y){
 // 按下鼠标判断鼠标位置是否在圆上,当画布上有多个路径时,isPointInPath只能判断最后那一个绘制的路径
 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>

更多精彩文章请点击专题: Javascript拖拽特效汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
深入认识javascript中的eval函数
Nov 02 Javascript
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
jquery动画1.加载指示器
Aug 24 Javascript
浏览器兼容console对象的简要解决方案分享
Oct 24 Javascript
javascript模拟订火车票和退票示例
Apr 24 Javascript
jQuery插件实现无缝滚动特效
Nov 24 Javascript
关于Javascript中defer和async的区别总结
Sep 20 Javascript
js实现扫雷小程序的示例代码
Sep 27 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
10分钟学会js处理json的常用方法
Dec 06 Javascript
canvas多重阴影发光效果实现
Apr 20 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 #Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 #Javascript
JS前后端实现身份证号验证代码解析
Jul 23 #Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 #Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 #Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
You might like
在PHP中使用curl_init函数的说明
2010/11/02 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
基于python实现简单日历
2018/07/28 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Python descriptor(描述符)的实现
2020/11/15 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
家长寄语大全
2014/04/02 职场文书
争先创优心得体会
2014/09/12 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
民事赔偿协议书
2014/11/02 职场文书
高考升学宴答谢词
2015/01/20 职场文书
毕业设计工作总结
2015/08/14 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
Python语言内置数据类型
2022/02/24 Python
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫