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 instanceof 内部机制探析
Oct 15 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
Apr 11 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
Grunt入门教程(自动任务运行器)
Aug 06 Javascript
javascript入门教程基础篇
Nov 16 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
ReactJs设置css样式的方法
Jun 08 Javascript
利用纯js + transition动画实现移动端web轮播图详解
Sep 10 Javascript
vue中实现左右联动的效果
Jun 22 Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
angular 服务的单例模式(依赖注入模式下)详解
Oct 22 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python的faker库用法
2019/11/28 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
文秘专业自荐信
2013/10/14 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
给同事的道歉信
2014/01/11 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
田径运动会广播稿
2015/08/19 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
如何利用golang运用mysql数据库
2022/03/13 Golang
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android