网站地图    收藏   

主页 > 专题教程 > canvas >

canvas画箭头并跟随鼠标转动

来源:未知    时间:2022-07-05 21:37 作者:小飞侠 阅读:

[导读] canvas画箭头并跟随鼠标转动 代码如下: headmetacharset=utf-8/title/title!--scriptsrc=js/tools.js/scriptscriptsrc=js/arrow.js/script--script//将tools定义为window对象的属性,该属性的值是一个对象window.tools={...


canvas画箭头并跟随鼠标转动



代码如下:

<head>    
<meta charset="utf-8" />    
<title></title>    
<!--  <script src="js/tools.js"></script>    
 <script src="js/arrow.js"></script> -->    
<script>    
//将tools定义为window对象的属性,该属性的值是一个对象    
window.tools = {};    
//获取鼠标指针位置    
window.tools.getMouse = function (element) {    
//定义一个mouse的对象    
var mouse = { x: 0, y: 0 };    
//为传入的元素添加mousemove事件    
element.addEventListener("mousemove", function (e) {    
var x, y;    
//在IE中,event对象是作为window对象的一个属性存在    
var e = e || window.event;    
//获取鼠标指针当前位置,并作兼容处理    
//兼容Firefox、chrome、IE9及以上    
if (e.pageX || e.pageY) {    
x = e.pageX;    
y = e.pageY;    
}    
//兼容IE8及以下,以及混杂模式下的Chrome和Safari    
else {    
x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;    
y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;    
}    
//将当前的坐标值减去canvas元素的偏移位置,则x、y为鼠标指针在canvas中的相对坐标值    
x -= element.offsetLeft;    
y -= element.offsetTop;    
mouse.x = x;    
mouse.y = y;    
})    
//返回值为mouse对象    
return mouse;    
}    
function Arrow(x,y,color,angle)    
{    
//箭头中心的横坐标,默认值为0    
this.x = x || 0;    
//箭头中心的纵坐标,默认值为0    
this.y = y || 0;    
//颜色,默认值为“#FF0099”    
this.color = color || "#FF0099";    
//旋转角度,默认值为0    
this.angle = angle || 0;    
}    
Arrow.prototype = {    
stroke: function (cxt) {    
cxt.save();    
cxt.translate(this.x, this.y);    
cxt.rotate(this.angle);    
cxt.strokeStyle = this.color;    
cxt.beginPath();    
cxt.moveTo(-20, -10);    
cxt.lineTo(0, -10);    
cxt.lineTo(0, -20);    
cxt.lineTo(20, 0);    
cxt.lineTo(0, 20);    
cxt.lineTo(0, 10);    
cxt.lineTo(-20, 10);    
cxt.closePath();    
cxt.stroke();    
cxt.restore();    
},    
fill: function (cxt) {    
cxt.save();    
cxt.translate(this.x, this.y);    
cxt.rotate(this.angle);    
cxt.fillStyle = this.color;    
cxt.beginPath();    
cxt.moveTo(-20, -10);    
cxt.lineTo(0, -10);    
cxt.lineTo(0, -20);    
cxt.lineTo(20, 0);    
cxt.lineTo(0, 20);    
cxt.lineTo(0, 10);    
cxt.lineTo(-20, 10);    
cxt.closePath();    
cxt.fill();    
cxt.restore();    
}    
};    
function $$(id) {    
return document.getElementById(id);    
}    
window.onload = function () {    
var cnv = $$("canvas");    
var cxt = cnv.getContext("2d");    
//实例化一个箭头,某中心坐标为画布中心坐标    
var arrow = new Arrow(cnv.width / 2, cnv.height / 2);    
//获取鼠标指针坐标    
var mouse = tools.getMouse(cnv);    
(function drawFrame() {    
window.requestAnimationFrame(drawFrame, cnv);    
cxt.clearRect(0, 0, cnv.width, cnv.height);    
var dx = mouse.x - cnv.width / 2;    
var dy = mouse.y - cnv.height / 2;    
//使用Math.atan2()函数计算出鼠标指针与箭头中心的夹角    
arrow.angle = Math.atan2(dy, dx);    
arrow.fill(cxt);    
})();    
}    
</script>    
</head>    
<body>    
<canvas id="canvas" width="200" height="150" style="border:1px solid silver;"></canvas>    
</body>    
</html>


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论