html5 canvas实现跟随鼠标旋转的箭头


Posted in HTML / CSS onMarch 11, 2016

本文实例为大家分享了

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html>  
  3.  <head>    
  4.   <meta charset="utf-8" />    
  5.   <meta http-equiv="X-UA-Compatible" content="IE=edge" />    
  6.   <title>canvas实现跟随鼠标旋转的箭头</title>    
  7.   <style>  
  8.     *{padding: 0;margin: 0}   
  9.     </style>    
  10.  </head>    
  11.  <body>    
  12.   <canvas width="500" height="500" style="border: 1px solid #555; display: block;margin: 0 auto;"></canvas>    
  13.   <script>  
  14.         var arrow=function () {   
  15.             this.x=0;    
  16.             this.y=0;   
  17.             this.color="#f90"  
  18.             this.rolation=0;   
  19.         }    
  20.         var canvas=document.querySelector('canvas')   
  21.         var ctx=canvas.getContext('2d');   
  22.         arrow.prototype.draw=function (ctx) {   
  23.             ctx.save();   
  24.             ctx.translate(this.x,this.y);   
  25.             ctx.rotate(this.rolation)   
  26.             ctx.fillStyle=this.color;   
  27.             ctx.beginPath();   
  28.             ctx.moveTo(0, 15);   
  29.             ctx.lineTo(-50, 15);   
  30.             ctx.lineTo(-50, -15);   
  31.             ctx.lineTo(0,-15);   
  32.             ctx.lineTo(0,-35);   
  33.             ctx.lineTo(50,0);   
  34.             ctx.lineTo(0,35);   
  35.             ctx.closePath()   
  36.             ctx.fill();   
  37.             ctx.restore();   
  38.         }   
  39.         var Arrow=new arrow();   
  40.         Arrow.x=canvas.width/2;   
  41.         Arrow.y=canvas.height/2;   
  42.            
  43.         var c_x,c_y; //相对于canvas坐标的位置;   
  44.         var isMouseDown=false;   
  45.         Arrow.draw(ctx)   
  46.         canvas.addEventListener('mousedown',function(e) {   
  47.             isMouseDown=true;   
  48.         },false)   
  49.         canvas.addEventListener('mousemove',function(e) {   
  50.             if(isMouseDown==true){   
  51.                 c_x=getPos(e).x-canvas.offsetLeft;   
  52.                 c_y=getPos(e).y-canvas.offsetTop;   
  53.                 //setInterval(drawFram,1000/60)   
  54.                 requestAnimationFrame(drawFram)   
  55.             }   
  56.         },false)   
  57.         canvas.addEventListener('mouseup',function(e) {   
  58.             isMouseDown=false;   
  59.         },false)   
  60.         function drawFram(){   
  61.             var dx=c_x-Arrow.x;   
  62.             var dy=c_y-Arrow.y;   
  63.             Arrow.rolation=Math.atan2(dy,dx);   
  64.             ctx.clearRect(0,0,canvas.width,canvas.height);   
  65.             Arrow.draw(ctx)   
  66.         }   
  67.         function getPos(e) {   
  68.             var mouse={x:0,y:0}   
  69.             var ee=e||event;   
  70.         
  71.             if(e.pageX||e.pageY){   
  72.                 mouse.x=e.pageX;   
  73.                 mouse.y=e.pageY;   
  74.             }else{   
  75.                 mouse.x=e.pageX+document.body.scrollLeft+document.document.documentElement.scrollLeft;   
  76.                 mouse.y=e.pageY+document.body.scrollTop+document.document.documentElement.scrollTop;   
  77.             }   
  78.             return mouse;   
  79.         }   
  80.     </script>     
  81.  </body>  
  82. </html>  

DEMO地址:http://codepen.io/jonechen/pen/eZpgWd

不废话,直接上DEMO了,这个效果实现起来并不复杂,但是麻雀随小,五脏俱全,主要涉及到的知识点有:

1、canvas的基本绘图;
2、js各个事件的监听;
3、js动画;
4、三角函数结合js在canvas中的基本应用;

以上就是本文的全部内容,希望对大家的学习有所帮助。

原文:http://www.cnblogs.com/jone-chen/p/5243439.html

HTML / CSS 相关文章推荐
CSS3 完美实现圆角效果
Jul 13 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
Mar 21 HTML / CSS
css3发光搜索表单分享
Apr 11 HTML / CSS
css3中新增的样式使用示例附效果图
Aug 19 HTML / CSS
CSS3 @media的基本用法总结
Sep 10 HTML / CSS
html5的新玩法——语音搜索
Jan 03 HTML / CSS
Html5实现文件异步上传功能
May 19 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
Sep 30 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
Dec 02 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
Aug 10 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 HTML / CSS
css position fixed 左右双定位的实现代码
Apr 29 HTML / CSS
HTML5如何实现元素拖拽
Mar 11 #HTML / CSS
Android本地应用打开方法——通过html5写连接
Mar 11 #HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
Mar 11 #HTML / CSS
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
Mar 14 #HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
Mar 14 #HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 #HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
Mar 15 #HTML / CSS
You might like
php 过滤器实现代码
2010/08/09 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
Golang二维数组的使用方式
2021/05/28 Golang
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python