2

私はこのサイトの他の回答を見てきましたが、何の役にも立ちませんでした。私が何かを見落としているのではないかと思われる場合は、お知らせください。

とにかく、マウスの位置に基づいて範囲を作成したいと思います。マウスの左ボタンとまったく同じように動作するようにしたいと思います。DOM をクリックしてテキスト カーソルをドロップし、ドラッグすると、範囲オブジェクトが選択オブジェクトをライブで更新し、「選択」を取得します。

ただし、他のマウス ボタンまたはキーボード キーで動作させる方法が見つかりません。

この能力を与える LMB の動作は何ですか? どこにも答えが見つからないようです。

助言がありますか?

同様に、DOM 要素の parentNode の childNode 内の文字まで正確にできるものを開発して、マウスオーバーすると文字がコンソールに表示されるようにすることは可能でしょうか?

4

1 に答える 1

5

それは可能であり、以前に Stack Overflow でマウス イベントから範囲を作成するコードを投稿しました。

https://stackoverflow.com/a/12924488/96100

マウスの右ボタンで選択できるデモは次のとおりです。

http://jsfiddle.net/timdown/BpjyG/6/

リンクされた回答のコードに加えて、次のものが含まれます。

var anchorRange;

function mouseMove(evt) {
    evt = evt || window.event;
    var range = getMouseEventCaretRange(evt), sel, selRange;
    if (typeof range.setEndPoint != "undefined") {
        // Old IE
        selRange = anchorRange.duplicate();
        selRange.setEndPoint("EndToEnd", range);
        if (selRange.text == "") {
            // Try the other way round
            selRange = anchorRange.duplicate();
            selRange.setEndPoint("StartToStart", range);
        }
        selRange.select();
    } else if (window.getSelection) {
        sel = window.getSelection();
        if (sel.extend) {
            // This is ideal: we can create forwards and backwards selections
            // simply by moving the focus using extend()
            sel.extend(range.startContainer, range.startOffset);
        } else {
            // We'll need to create a range and test for backwardsness
            selRange = document.createRange();
            selRange.setStart(sel.anchorNode, sel.anchorOffset);
            selRange.setEnd(range.startContainer, range.startOffset);
            if (selRange.collapsed) {
                // Try the other way roound
                selRange.setStart(range.startContainer, range.startOffset);
                selRange.setEnd(sel.anchorNode, sel.anchorOffset);
            }
            selectRange(selRange);
        }
    }
}

function mouseUp(evt) {
    evt = evt || window.event;
    if (evt.button == 2) {
        if (document.releaseCapture) {
            document.releaseCapture();
        }
        document.onmousemove = null;
        document.onmouseup = null;
        anchorRange = null;
    }
}

document.oncontextmenu = function() {
    return false;
};

document.onmousedown = function(evt) {
    evt = evt || window.event;
    if (evt.button == 2) {
        rightMouseButtonDown = true;
        var range = getMouseEventCaretRange(evt);
        anchorRange = range;
        selectRange(range);
        if (document.body.setCapture) {
            document.body.setCapture();
        }
        document.onmousemove = mouseMove;
        document.onmouseup = mouseUp;

        return false;
    }
};
于 2013-09-06T09:49:14.540 に答える