箭头随着手指滑动而旋转(一)
一、需求:
用canvas来实现一个箭头随着手指滑动而旋转
二、思路:
1.首先要写一个canvas绘制箭头的函数
2.写一个获取当前触摸点的坐标的函数
3.初始化箭头函数
4.随着触摸点的不停变化,获取到当前触摸点和箭头中心点的角度,然后用canvas不停绘制箭头
三、代码实现
1. arrow.js
function Arrow(){this.x=0;this.y=0;this.color="#ff0";this.rotation=0;
}
Arrow.prototype.draw=function(context){context.save();context.translate(this.x,this.y);context.rotate(this.rotation);context.lineWidth=2;context.fillStyle=this.color;context.beginPath();context.moveTo(-50,-25);context.lineTo(0,-25);context.lineTo(0,-50);context.lineTo(50,0);context.lineTo(0,50);context.lineTo(0,25);context.lineTo(-50,25);context.lineTo(-50,-25);context.fill();context.stroke();context.restore();
}
2.utils.js
var utils={captureMouse:function(element){var mouse={x:0,y:0};element.addEventListener("mousemove",function(e){var x,y;if(e.pageX||e.pageY){x=e.pageX;y=e.pageY;}else{x=e.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft);y=e.clientX+(document.documentElement.scrollTop||document.body.scrollTop);}x-=element.offsetLeft;y-=element.offsetTop;mouse.x=x;mouse.y=y;},false);return mouse;},captureTouch:function(element){var touch={x:null,y:null,isPressed:false}element.addEventListener("touchstart",function(e){touch.isPressed=true;},false);element.addEventListener("touchmove",function(e){var x,y,event=e.touches[0];if(event.pageX||event.pageY){x=event.pageX;y=event.pageY;}else{x=event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft);y=event.clientY+(document.documentElement.scrollTop||document.body.scrollTop);}x-=element.offsetLeft;y-=element.offsetTop;touch.x=x;touch.y=y;},false);element.addEventListener("touchend",function(e){touch.isPressed=false;},false);return touch;}
}
3.inde.js
document.addEventListener("touchmove",function(e){e.preventDefault();},false);var canvas=document.querySelector("#canvas");canvas.width=document.documentElement.clientWidth||document.body.clientWidth;canvas.height=document.documentElement.clientHeight||document.body.clientHeight;var context=canvas.getContext("2d");var mouse=utils.captureTouch(canvas);var arrow=new Arrow();arrow.x=canvas.width/2;arrow.y=canvas.height/2;(function drawFrame(){window.requestAnimationFrame(drawFrame,canvas);context.clearRect(0,0,canvas.width,canvas.height);var dx=mouse.x-arrow.x,dy=mouse.y-arrow.y;arrow.rotation=Math.atan2(dy,dx);arrow.draw(context);})();
4.html
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><style type="text/css">html,body{height: 100%;width:100%;overflow: hidden;}body,canvas{margin: 0;padding: 0;}</style></head><body><canvas id="canvas"></canvas></body><script src="js/utils.js" type="text/javascript" charset="utf-8"></script><script src="js/arrow.js" type="text/javascript" charset="utf-8"></script><script src="js/index.js" type="text/javascript" charset="utf-8"></script>
</html>
转载于:https://www.cnblogs.com/zhouyg/p/6225936.html
箭头随着手指滑动而旋转(一)相关推荐
- 箭头随着手指滑动而旋转(二)
一.说明 这篇文章和我的上一篇文章 <箭头随着手指滑动而旋转(一)> 有所不同,上一篇文章中的箭头方向始终指向触摸点的位置,这篇文章的箭头方向是在上一次方向的基础上进行改变. 话不多说,开 ...
- androidstudio判断手指滑动方向_方向盘的黑科技有多“黑”
Mercedes-Benz 从第一辆汽车发明到现在的一个多世纪里,有数不清的汽车品牌诞生,也有不少品牌衰败.而他们中间,真正敢说"我为汽车技术的革命与进步做出了贡献"的品牌却寥寥无 ...
- QT使用之 手指滑动 | 物理惯性继续滑动动画的实现,根据不同速度实现不同动画效果
2021/03/26: 参考如下:有惯性,有回顶效果:使用手势 QT使用之 :手指滑动后物理惯性滑动-动画的实现,根据不同速度有不同的效果 一. 前言 首先,因为是使用手指滑动,所以控件要求能够支持 ...
- jquery 手指滑动多半屏_JS拖拽专题(五)——「玩出花儿来」移动端滑动事件的封装...
欢迎来到我的JS拖拽专题系列文章,本章节将是拖拽系列的最后一篇.感谢大家的支持^_^ 上一章节我们说到了拖拽让图片相互之间交换位置,相对来说是一个比较综合的示例,涉及到了矩形的碰撞检测,勾股定理计算两 ...
- Android BackgroundViewPager:类似桌面背景壁纸随手指滑动
Android BackgroundViewPager:类似桌面背景壁纸随手指滑动 Android BackgroundViewPager要实现的功能和Android桌面极为类似,即,假设用户的 ...
- uniapp 简单有效判断手指滑动方向
@touchstart="touchStart"@touchend="touchEnd"@touchmove='move' 首先 是在uniapp中运用这三个方 ...
- table 手机 滑动_【推荐下载】html5手机端手指滑动选项卡滚动切换效果(转)
html5 手机端手指滑动选项卡滚动切换效果 ( 转 ) 2017/09/25 41 !DOCTYPE html html lang="en" head meta charset= ...
- 手机html5翻页效果代码,jquery html5手机端翻书效果_手指滑动书本翻页效果代码
特效描述:jquery html5手机端翻书 手指滑动 书本翻页效果.显现手机端翻书效果,支持手拖动翻页 代码结构 1. 引入JS 2. HTML代码 function loadApp() { // ...
- 点击左右箭头实现内容滑动
实现效果: 1.通过点击左右箭头实现内容滑动 2.点击+添加标签 3.点击×删除标签 4.点击标签 实现思路: 1.position布局 1 .通过点击左右箭头实现内容滑动 代码: html < ...
最新文章
- AD16画线时如何切换90°、45°、任意角度画线模式
- Spring 依赖注入(集合)/util命名空间/自动注入
- ubuntu12.04 安装kinect V1驱动
- html绘制静态图表,怎样用JavaScript和HTML5 Canvas绘制图表
- Helm 3 完整教程(十一):Helm 函数讲解(5)日期函数
- enumerate取下标
- Hive 求top N
- 搜索场 day1 A 求和
- 第二篇:基于小米手机的,第三方recovery教学
- 精选的 Go 框架,库和软件的精选清单
- 无线系列-WiFi信号波形产生器
- ArcGIS中裁剪(clip)出现000117错误的解决办法
- 0、EasyExcel自定义转换器Converter
- 工作量单位-人月、人日、人时 详解
- 熵值法的python实现方法
- 海湾主机汉字注释表打字出_电脑打字打不出来_电脑上打字只显示字母打不出汉字是怎么回事?...
- 第三方测试什么意思?国内知名第三方测试公司排名
- 解密回声消除技术之二(应用篇)
- Unable to install breakpoint in
- php把buffer转化为图片_长微博生成(将html转化为图片)原理浅析
热门文章
- Excel设置excel打印每页都有表头标题
- 新版backtrader国内期货实盘模拟交易发布
- 3Q 大战全面升级;初版 Unix 发布 | 历史上的今天
- 微信登录小程序授权显示服务器出错,微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)...
- 教大家怎么申请邮箱,以及如何申请邮箱号
- 分享3个音频合并无缝衔接软件,音频合并超简单
- 操作ChatGPT竟写出毁灭人类计划书!“AI正在指数级发展”
- 泛微OA-一键清空明细表
- 如何解决MathType兼容Office 2016(word导入mathtype)
- html页面之间跳转失败,js跳转到上一页面失败的解决方法