在鼠标事件上更新画布
Update canvas on mouse events
我已经使用这个JS库创建了一个六边形网格。栅格确实正确地绘制在画布上。我的问题是尝试在鼠标事件上引入事件。例如,当我将鼠标悬停在某个六边形上时,我希望它的背景颜色发生变化。
目前,无论光标悬停在哪个六边形上,只有最后创建的六边形才会在mouseover
上更改。如何使事件侦听器更新光标所在的特定六边形?
如果由于绘制的对象被"光栅化"到画布中而无法做到这一点,建议采用哪种替代方法?
代码如下:
<canvas id="stage"></canvas>
<script>
var element = document.getElementById("stage");
element.height = window.innerHeight;
element.width = window.innerWidth;
var stage = new createjs.Stage("stage");
stage.x = window.innerWidth/2;
stage.y = window.innerHeight/2;
stage.enableMouseOver();
var grid = new Grid();
grid.tileSize = 55;
var stageTransformer = new StageTransformer().initialize({ element: element, stage: stage });
stageTransformer.addEventListeners();
var tick = function (event) { stage.update(); };
var colorHexagon = function(hexagon, fill) {
hexagon.graphics
.beginFill(fill)
.beginStroke("rgba(50,50,50,1)")
.drawPolyStar(0, 0, grid.tileSize, 6, 0, 0);
};
var coordinates = grid.hexagon(0, 0, 3, true)
for (var i = 0; i < coordinates.length; i++) {
var q = coordinates[i].q,
r = coordinates[i].r,
center = grid.getCenterXY(q, r),
hexagon = new createjs.Shape();
hexagon.cursor = "pointer";
hexagon.addEventListener("mouseover", function() {
colorHexagon(hexagon, "rgba(50,150,0,1)")
});
hexagon.addEventListener("mouseout", function() {
colorHexagon(hexagon, "rgba(150,150,150,1)")
});
hexagon.q = q;
hexagon.r = r;
hexagon.x = center.x;
hexagon.y = center.y;
colorHexagon(hexagon, "rgba(150,150,150,1)");
stage.addChild(hexagon);
stage.update();
}
tick();
createjs.Ticker.setFPS(30);
createjs.Ticker.addEventListener("tick", tick);
</script>
这应该可以工作。
stage.addEventListener("mouseover", function(evt) {
colorHexagon(evt.target, "rgba(50,150,0,1)")
});
stage.addEventListener("mouseout", function(evt) {
colorHexagon(evt.target, "rgba(150,150,150,1)")
});
你可以把它们放在剧本的最底部。它们不必处于循环中。
将事件处理程序绑定到六边形的容器,而不是单独绑定到每个六边形,并使用鼠标坐标找到悬停的六边形。检查库的文档,也许他们有一个方法。
相关文章:
- jquery select()/window.get选择仅在鼠标抬起后更新
- 将鼠标悬停在字符串上并更新预览
- 在鼠标事件上更新画布
- 当鼠标空闲时强制 Chrome 光标更新原版 JavaScript
- 这个可重用的 AngularJS 服务如何在鼠标移动时更新
- 仅当没有鼠标事件时才更新页面
- 更新 DOM 后“鼠标向上”出现问题
- D3.js基于鼠标移动的更新行
- d3.js:如何使用鼠标洗涤器工具提示单击更新图表
- 传单-onEachFeature鼠标悬停更新表的innerHTML
- 如何在鼠标悬停时更新repeat中元素的样式
- 使用鼠标时,jquery上的onPaste事件未更新
- Kineticjs和hammerjs:拖动舞台时正确更新鼠标位置
- 在鼠标悬停时更新第二个图表
- 在Angular 2中,直到鼠标悬停,组件变量才会在视图中更新
- setInterval更新ajax列,除非鼠标悬停
- 鼠标悬停不工作在整个网站wordpress更新后
- 如何在另一个元素的鼠标事件上更新元素的类?
- 单选按钮状态在鼠标上升或点击时没有更新
- html5 canvas - JavaScript-将鼠标X和Y位置存储在变量中,并在鼠标移动时不断更新它们