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 相关文章推荐
同时使用n个window onload加载实例介绍
Apr 25 Javascript
jquery slibings选取同级其他元素的实现代码
Nov 15 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
Mar 31 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 jQuery
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
谈谈React中的Render Props模式
Dec 06 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
20招让你的Python飞起来!
2016/09/27 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
python pygame实现2048游戏
2018/11/20 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
美术社团活动总结
2014/06/27 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
房贷工资证明范本
2015/06/12 职场文书
三八妇女节主持词
2015/07/04 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android