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 String.replace的妙用
Sep 08 Javascript
用jquery设置按钮的disabled属性的实现代码
Nov 28 Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
Apr 18 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
Mar 27 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
javascript中的数据类型检测方法详解
Aug 07 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中文分词的简单实现代码分享
2011/07/17 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
Vue自定义指令写法与个人理解
2019/02/09 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python实现的计数排序算法示例
2017/11/29 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
用python绘制樱花树
2020/10/09 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python