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 ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
node.js中的path.isAbsolute方法使用说明
Dec 08 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
jQuery Validation PlugIn的使用方法详解
Dec 18 Javascript
轻松实现jquery手风琴效果
Jan 14 Javascript
javascript实现随机生成DIV背景色
Jun 20 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
Angular4 反向代理Details实践
May 30 Javascript
原生JS实现的简单小钟表功能示例
Aug 30 Javascript
node.js域名解析实现方法详解
Nov 05 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 解决session死锁的方法
2013/06/20 PHP
php四种基础算法代码实例
2013/10/29 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
php建立Ftp连接的方法
2015/03/07 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
javascript天然的迭代器
2010/10/29 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
Vue表单实例代码
2016/09/05 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
廉洁使者实施方案
2014/03/29 职场文书
政风行风建设责任书
2014/07/23 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
小学生作文批改评语
2014/12/25 职场文书
学生党员检讨书范文
2014/12/27 职场文书
财政局长个人总结
2015/03/04 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS