【问题标题】:add dropdown dynamically in canvas在画布中动态添加下拉菜单
【发布时间】:2019-03-08 23:13:57
【问题描述】:

我想创建一个允许书写化学式的画布 这个想法是使用六边形,可以点击他的顶部来改变原子。因此,当我们单击六边形顶点时,会出现一个下拉菜单,我们可以在其中选择原子。 我可以将下拉菜单作为同级添加到画布并通过容器定位它,但是我如何动态地(通过鼠标单击)在画布上添加下拉菜单。

下拉菜单示例

欢迎任何想法,反思。 我制作了一个简单的六边形,它可以代表环己烷 有代码建议的人

var canvas = document.querySelector('#canvas').getContext('2d'),side = 0,
    size = 100,
    x = 100,
    y = 100;

canvas.beginPath();
canvas.moveTo(x + size * Math.cos(0), y + size * Math.sin(0));

for (side; side < 7; side++) {
  canvas.lineTo(x + size * Math.cos(side * 2 * Math.PI / 6), y + size * Math.sin(side * 2 * Math.PI / 6));
}


canvas.stroke();
#canvas {
  width: 200px;
  height: 200px;
}
&lt;canvas id="canvas" width="400" height="400"&gt;&lt;/canvas&gt;

【问题讨论】:

  • 您到底需要什么?如何显示事件中的元素?如何检测画布特定区域/形状上的点击事件?如何相对于画布正确定位元素?请缩小您的问题范围,我们不编写免费代码,请注意,我列举的所有问题都已在此处被多次询问和回答。
  • @Kaiido 问题是如何在鼠标点击画布上放置一个html元素
  • 你知道如何相对于另一个元素定位一个元素吗?你也知道如何监听点击事件吗?那你就不需要我们了。否则,请搜索一下,正如我所说,这些问题已经回答了很多次了。如果你因为后面的元素是 而不是
    而感到困惑,那么别担心,它是一样的。

标签: javascript canvas html5-canvas


【解决方案1】:

我会做的是:

  1. 页面上已有一个不可见的下拉框,在画布元素之外
  2. 单击画布时,检查用户是否单击了六边形。 (检查鼠标点击的距离是否在屏幕上任何六边形的范围内)
  3. 如果它在六边形的范围内,请将不可见的下拉框移动到六边形的位置,然后将其变为可见。

如果您需要示例,请告诉我。

我在以下 CodePen 中编写了一个示例:https://codepen.io/darrylhuffman/pen/OqmBja

这是我用来确定用户是否点击了一个原子,然后移动下拉框的逻辑:

document.body.addEventListener('mouseup', e => {
    let atom = atoms.find(a => distance(a.position, { x: e.pageX, y: e.pageY}) <= a.r)
    atomDropdown.classList.remove('hidden')
    if(atom){
       atomDropdown.style.left = atom.position.x + 'px'
       atomDropdown.style.top = (atom.position.y + atom.r) + 'px'
    }
})

请务必阅读我在 CodePen 中的所有代码,因为我相信您可能希望采用我在生成原子/键/等时采用的方法。

【讨论】:

  • 感谢您的回答,但还有一个问题是我只想在六边形峰会上添加一个下拉列表,因为它是唯一可以更改原子的地方。如果你有一个例子,我会很高兴
  • @soniamaklouf 我已经用一些肯定能解决您问题的代码更新了我的答案。希望这对你有用! :)
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多