Wie man web-element (id) von der element-position in D3.js force-Diagramm

Arbeite ich mit der D3.js Kraft-Diagramm, aber ich bin nicht in der Lage, um herauszufinden, die element-id aus dem element position (die ich kenne).

Ich bin mit Leap motion. Ich brauche, um zu simulieren, ein Maus-Ereignis (ein Klick, ein Schritt, ein ziehen, etc.) ohne eine Maus. Und, wenn ich richtig bin, um der Lage sein, dies zu tun, ich brauche, um herauszufinden, was ist die element-id aus den Koordinaten x und y (die Koordinaten weiß ich aus dem Leap motion-Zeiger). Also von dem, was Sie oben geschrieben haben, die ich brauche, um herauszufinden, die ('.Knoten').
Hier ist, was ich bereits versucht aber es hat nicht funktioniert:

Ist es möglich, verwenden Sie nicht die Maus, non-touch-Ereignisse zur Interaktion mit einem D3.js graph? Wenn ja, was ist der effizienteste Weg, um darüber zu gehen?

So habe ich diese Funktion (siehe unten), aber ich muss wissen, die element-id, um es richtig funktioniert:

//graph.simulate(document.getElementById("r_1"), 'dblclick', {pointerX: posX, pointerY: posY});
//here id r_1 is hardcoded, but I need to find out id from x and y coordinates.

this.simulate = function (element, eventName) {
    function extend(destination, source) {
        for (var property in source)
            destination[property] = source[property];
        return destination;
    }

    var eventMatchers = {
        'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
        'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
    };

    var defaultOptions = {
        pointerX: 0,
        pointerY: 0,
        button: 0,
        ctrlKey: false,
        altKey: false,
        shiftKey: false,
        metaKey: false,
        bubbles: true,
        cancelable: true
    };

    var options = extend(defaultOptions, arguments[2] || {});
    var oEvent, eventType = null;

    for (var name in eventMatchers) {
        if (eventMatchers[name].test(eventName)) {
            eventType = name;
            break;
        }
    }

    if (!eventType)
        throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');

    if (document.createEvent) {
        oEvent = document.createEvent(eventType);
        if (eventType == 'HTMLEvents') {
            oEvent.initEvent(eventName, options.bubbles, options.cancelable);
        }
        else {
            oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView,
                options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
                options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
        }
    element.dispatchEvent(oEvent);
    }
    else {
        options.clientX = options.pointerX;
        options.clientY = options.pointerY;
        var evt = document.createEventObject();
        oEvent = extend(evt, options);
        element.fireEvent('on' + eventName, oEvent);
    }
    return element;
}

Vielen Dank für Eure Hilfe und Ideen.

  • Ich bearbeitet meine Antwort mit einer anderen Lösung. Einen Blick zu haben.
InformationsquelleAutor Jirka | 2014-10-11
Schreibe einen Kommentar