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 相关文章推荐
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
Jul 24 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
JavaScript实现前端倒计时效果
Feb 09 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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中json_decode()和json_encode()的使用方法
2012/06/04 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
PHP中header用法小结
2016/05/23 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
浅谈Python 函数式编程
2020/06/20 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
体育教师自荐信范文
2013/12/16 职场文书
见习期自我鉴定
2014/01/31 职场文书
小学三年级学生评语
2014/04/22 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
白鹤梁导游词
2015/02/06 职场文书
2016年寒假生活小结
2015/10/10 职场文书
创业计划书之花店
2019/09/20 职场文书