【问题标题】:Javascript trigger selection startJavascript触发器选择开始
【发布时间】:2012-11-06 22:26:05
【问题描述】:

是否可以通过javascript/jQuery触发选择start

在我看来,鼠标文本选择可以分为以下几个步骤:

1) 触发 mousedown 事件并开始选择

2) 触发 mousemove 并移动选择的“终点”

3) 触发 mouseup 并停止选择

可以仅触发 步骤 1),即在 span 元素中的文本上... ...所以在那之后,移动鼠标光标的行为就像选择等待 mouseup?

如何实现以及浏览器如何知道选择开始?

Rangy 库:我知道这个用于创建自定义范围选择的 javascript 库。但在我看来,通过鼠标事件模拟自己的选择太复杂了。我只是想告诉浏览器,我从 (span,offset 2) 开始选择,它应该在 step 2) 继续。

【问题讨论】:

  • 好问题。也想知道这个问题的答案。

标签: javascript browser triggers selection


【解决方案1】:

您可以使用可选择元素和文档上的鼠标事件来控制何时开始和结束选择以及何时测试选择等。

然后在选择过程中,您可以使用window.getSelection() 获取有关当前选择的信息。

试试这样的:

var m_MouseDown = false;

document.getElementById('selectMyContent').onmousedown = function (e) {
    m_MouseDown = true;
};

document.onmouseup = function (e) {
    m_MouseDown = false;
};

document.onmousemove = function(e) {
    if (m_MouseDown) {
        document.getElementById('showTextHere').innerHTML = getSelectionInfo();
    }        
}

function getSelectionInfo() {
    var selected = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                var range = sel.getRangeAt(i);

                var txt = document.createElement('div');
                txt.appendChild(range.cloneContents());
                selected = range.startContainer.parentNode.id + ':' + range.startOffset + '-' + range.endOffset + ' "' + txt.innerHTML + '"';
            }
        }
    }
    return selected;
}

有关示例,请参阅 http://jsfiddle.net/nY328/10/

【讨论】:

  • 感谢您提供详细的示例,但这并不是我想要实现的。我将尝试在您的 jsfiddle 示例中进行解释:1)当我打开 jsfiddle 时,mousedown 将在 span#selectMyContent @ 位置 4 上自动(onload)触发。2)所以我只需移动鼠标并在 span#showTextHere 中查看状态。 ...问题是触发 mousedown 事件不足以让浏览器模拟此 mousedown 事件开始选择过程。 ...浏览器如何知道 mousedown 何时开始选择,何时不开始?
  • 很遗憾 - 或者说非常幸运 - 您无法从网页控制鼠标及其事件。您可以隐藏光标并捕获/获取鼠标的所有权,但前提是您的页面具有焦点。能够控制鼠标将严重损害浏览器的安全性,从而有效地允许恶意方通过脚本执行通过鼠标(在屏幕键盘上?)可以实现的任何事情。
  • 由于与上述原因类似,您也不能在浏览器上下文中模拟鼠标事件,因为这将允许恶意脚本在下载链接上触发点击事件,从而绕过自动下载安全.
  • 但是,您可以创建范围 - 如此处所示 stackoverflow.com/questions/6239857/… - 并使用鼠标事件,您可以根据鼠标位置计算和更改选择范围。
  • 嗯,我只是想,当我能够创建自定义范围并触发 mousedown 事件时,我应该也能够创建选择开始的“真实事件”。但显然这是被禁止的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多