我可以向动态创建的two.js元素添加类吗?

时间:2019-02-23 09:38:08

标签: javascript two.js

我正在使用下面显示的代码在包装(div)绘制形状中创建46个小圆圈;

let elem = document.getElementById('draw-shapes');
let params = { width: 1024, height: 768 };
let two = new Two(params).appendTo(elem);

for (let i = 1; i < 47; i++) {
  circle = two.makeCircle(x, y, radius);
  circle.fill = 'green';
  circle.stroke = 'white';
  circle.linewidth = 1;
  circle.id = i;
}

所有图形均使用Two.js库制作。我阅读了文档,可以更改创建的元素的ID,但是我还需要为每个元素分配一个类。我已经尝试了从纯js setAttribute到jQuery .attr和.addClass方法的所有方法,但是它们都不起作用,所以我开始怀疑这是否有可能?如果有人知道方法,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:2)

没有内部实用程序或属性可访问每个Two元素的DOM节点。

但是您指定的id实际上已作为two-<specified-id>添加到实际节点。

因此您可以使用普通的document.getElementById

所以就您而言

let elem = document.getElementById('draw-shapes');
let params = {
  width: 300,
  height: 300
};
let two = new Two(params).appendTo(elem);

for (let i = 1; i < 20; i++) {
  const circle = two.makeCircle(i * 10, i * 10, 40);
  circle.fill = 'green';
  circle.stroke = 'white';
  circle.linewidth = 1;
  circle.id = `two-circle-${i}`;
}
two.update();

// add classname to every fifth element;
for (let i = 1; i < 20; i += 5) {
  const circleNode = document.getElementById(`two-circle-${i}`);
  circleNode.classList.add('classname');

  circleNode.addEventListener('mouseover', function() {
    const path = two.scene.getById(this.id)
    path.scale = 1.2;
    two.update();
  });

  circleNode.addEventListener('mouseout', function() {
    const path = two.scene.getById(this.id)
    path.scale = 1;
    two.update();
  });
}
.classname {
  stroke-width: 5;
  stroke: red;
  fill:yellow;
  cursor:pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/two.js/0.6.0/two.js"></script>

<div id="draw-shapes"></div>