微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-当浏览器窗口缩小/移动时,画布单击事件搞砸了

我一直在用HTML5 Canvas创建一个六边形网格.我有一个基本的网格,如果您单击一个十六进制,它将突出显示该十六进制(此处的演示:http://cfiresim.com/hex-map-game-reboot/test.html)

在javascript中,我将画布定义为这样(为简洁起见,省略了某些部分):

 var hex = {};
 hex.canvas = document.getElementById("HexCanvas");
 hex.ctx = null;
 console.log("Initializing new game...");
 this.radius = 20;
 this.side = Math.round((3 / 2) * this.radius);
 this.height = Math.round(Math.sqrt(3) * this.radius);
 this.width = Math.round(2 * this.radius);

 //Set Size of main div to size of canvas
 $('#primary-panel').css('height', (hex.height * hex.rows)+hex.height*2);
 hex.canvas.style.width='100%';
 hex.canvas.style.height='100%';
 hex.canvas.width  = hex.canvas.offsetWidth;
 hex.canvas.height = hex.canvas.offsetHeight;

 //Set click eventlistener for canvas
 this.canvas.addEventListener("mousedown", this.clickEvent.bind(this), false);

 this.ctx = this.canvas.getContext('2d');

所有代码都可以在这里找到:https://github.com/boknows/hex-map-game-reboot

我的主要问题是:当通过浏览器调整画布大小时,是否有一种特定的方法来防止单击事件变得毫无用处?例如,如果将浏览器缩小到仅大于网格的大小,则单击时不会在正确的位置注册.我是否缺少画布的某些功能?也许getSelectedTile()定义不正确?

编辑:这似乎主要发生在浏览器稍微滚动一下,从而将网格移出屏幕时.然后,点击会记录一个怪异的偏移量,我猜这等于屏幕滚动的距离.忠告?

解决方法:

您必须考虑页面滚动的位置.

HexagonGrid.js中,代替此:

hex.clickEvent = function(e) {
        var mouseX = e.pageX;
        var mouseY = e.pageY;

做这个:

hex.clickEvent = function(e) {
        var mouseX = e.pageX - window.pageXOffset;
        var mouseY = e.pageY - window.pageYOffset;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。