2

我正在尝试动态模拟点击,我已经用这个函数为三个缩进树做了它:

document.onmousemove = function(e) {
        cursorX = e.pageX;
        cursorY = e.pageY;
}

function ret_vw(v) {
  var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
  return (v * w) / 100;
}

function simulateClick(x, y) {
    var s = d3.select(document.elementFromPoint(x, y));
    s.on("click")(s.datum());
}

function multiple_click() {
    //onmousemove = function(e){console.log("mouse location:", e.clientX, e.clientY)}
    if (cursorX >= ret_vw(15.25) && cursorX < ret_vw(42)) {
        simulateClick(cursorX + ret_vw(28) - window.pageXOffset, cursorY - window.pageYOffset);
        simulateClick(cursorX + ret_vw(56) - window.pageXOffset, cursorY - window.pageYOffset);
    }
    else if (cursorX >= ret_vw(43.25) && cursorX < ret_vw(70.25)) {
        simulateClick(cursorX - ret_vw(28) - window.pageXOffset, cursorY - window.pageYOffset);
        simulateClick(cursorX + ret_vw(28) - window.pageXOffset, cursorY - window.pageYOffset);
    }
    else if (cursorX >= ret_vw(71.25)) {
        simulateClick(cursorX - ret_vw(28) - window.pageXOffset, cursorY - window.pageYOffset);
        simulateClick(cursorX - ret_vw(56) - window.pageXOffset, cursorY - window.pageYOffset);
    }
    else
        console.log("no , cursorX = " + cursorX + " , cursorY = " + cursorY + " vw = " + ret_vw(15.25));
}

它适用于下面的这个,如果我点击一个,它将点击另外两个标识为三个:

(无点击)

在此处输入图像描述

(点击)

在此处输入图像描述

但是我遇到了两个问题,如果我将其中一个缩进树推到窗外,它将不起作用,其次,我需要动态执行它,因为我不会总是有 3 个缩进的三个(我可以有两个,四个,五个识别的树...)

这是我的函数 multiple_click 不起作用的情况的图片(窗口外的树..):

在此处输入图像描述

谢谢你们的帮助!

(带有 d3.js 的识别树的来源:https ://bl.ocks.org/mbostock/1093025 )

4

1 回答 1

1

我建议不要使用鼠标事件来触发点击——它最终会调用这个点击函数:

function click(d) {
  if (d.children) {
    d._children = d.children;
    d.children = null;
  } else {
    d.children = d._children;
    d._children = null;
  }
  update(d);
}

您将创建一个新的 mouseClick 函数来替换鼠标单击时发生的当前函数。这将调用所有匹配项的当前点击函数。这是概念:

function mouseClick(d) {
  // Assuming you have multiple roots (example only has root)

  for (root in roots) {
      // Find d in the current root (by name?)
      matching_d = ...  

      click(matching_d)
  }
} 
于 2018-11-26T10:16:37.280 回答