canvas坐标
欢迎大家有好点建议可以提。js高级扣扣群:170798851 欢迎来交流学习
git项目地址:https://github.com/Jonavin/HTML5_Study
/**
* Created by wsf on 2014-11-22.
*
*/
;
(function(win){
//局部变量(这样定义变量会增加链深,但管理集中
var doc = win.document,_cvs = doc.getElementById("canvas");
var prop = {
cvs:_cvs,
readout:doc.getElementById("readout"),
width:_cvs.width,//
height:_cvs.height,
ctx:_cvs.getContext("2d"),
imgsheet:new Image()//显示结果的表
};
var _functions = {
//窗口坐标转为换cvs坐标
winPos2CvsPos:function(cvs,_x,_y){
var _box = cvs.getBoundingClientRect();//获得cvs元素相对于浏览器圆点的坐标
return {
x:_x-_box.left*(cvs.width/_box.width),
y:_y-_box.top*(cvs.height/_box.height)
}
},
//画背景
drawBg:function(){
var VERTICAL_LINE_SPACING = 12,i = prop.height,ctx = prop.ctx;
ctx.clearRect(0,0,prop.width,prop.height);//清空画布
ctx.strokeStyle = 'lightgray';
ctx.lineWidth = 0.5;
while(i>VERTICAL_LINE_SPACING*4){
ctx.beginPath();//开始作画
ctx.moveTo(0,1);//移动圆点
ctx.lineTo(prop.width,i);
ctx.stroke();
i-=VERTICAL_LINE_SPACING;
}
},
//画表
drawImgSheet: function () {
prop.ctx.drawImage(prop.imgsheet,0,0);
},
//画导航线
drawGuideLines:function(x,y){
prop.ctx.strokeStyle='lightblue';
prop.ctx.lineWidth=1;
this.drawVerticalLine(x);
this.drawHorizontalLine(y);
},
//更新显示结果
updateReadout: function (x,y) {
prop.readout.innerText = '('+ x.toFixed(0)+','+ y.toFixed(0)+')';
},
//画水平线
drawHorizontalLine:function(y){
prop.ctx.beginPath();
prop.ctx.moveTo(0,y+.5);
prop.ctx.lineTo(prop.width,y+.5);
prop.ctx.stroke();
},
//画垂直线
drawVerticalLine: function (x) {
prop.ctx.beginPath();
prop.ctx.moveTo(x +.5,0)
prop.ctx.lineTo(x +.5,prop.height);
prop.ctx.stroke();
}
}
//鼠标滑过画布
prop.cvs.onmousemove = function(e){
var _loc = _functions.winPos2CvsPos.call(_functions,_cvs, e.clientX, e.clientY);
_functions.drawBg.call(_functions);
_functions.drawImgSheet.call(_functions);
_functions.drawGuideLines.call(_functions,_loc.x,_loc.y);
_functions.updateReadout.call(_functions,_loc.x,_loc.y);
}
//初始化
prop.imgsheet.src = "img.jpg";
prop.imgsheet.onload = function(){
_functions.drawImgSheet.call(_functions);
}
_functions.drawBg.call(_functions);//调用
})(window);
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>将鼠标坐标转换为canvas坐标</title>
<link rel="stylesheet/less" type="text/css" href="style.less">
</head>
<body>
<div id = "readout"></div>
<canvas id="canvas" width = "400" height="250">
您的浏览器不支持canvas。
</canvas>
</body>
<script src="../common/less.js"></script>
<script src="mousePos2CanvasPos.js"></script>
</html>


1451

被折叠的 条评论
为什么被折叠?



