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 相关文章推荐
JQuery CSS样式控制 学习笔记
Jul 23 Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 Javascript
JavaScript中几种常见排序算法小结
Feb 22 Javascript
jQuery右键菜单contextMenu使用实例
Sep 28 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
May 12 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
Vue使用vue-cli创建项目
Sep 01 Javascript
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
深入理解webpack process.env.NODE_ENV配置
Feb 23 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
珊瑚虫IP库浅析
2007/02/15 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
php微信公众平台开发类实例
2015/04/01 PHP
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python闭包的两个注意事项(推荐)
2017/03/20 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python中的self用法详解
2019/08/06 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python装饰器的特性原理详解
2019/12/25 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python实现图片转字符画的完整代码
2021/02/21 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
Docker官方工具docker-registry案例演示
2022/04/13 Servers