在 Chrome 39 中,这些句柄似乎不存在,即使您希望它们存在。
在 Firefox 中,可以简单地使用 execCommand,就像 ZoogieZork 回答的那样。
但在 Internet Explorer 中,此功能无法关闭。必须解决它。
在WYMeditor 开发中,这是我发现的。
以下结果:
- 在 IE 中,调整大小的 UI 会显示片刻然后消失。用户似乎没有办法使用它。
- 图像是在
mouseup 上选择的文本
- 能够拖动图像。在某些浏览器中,可能必须在拖动之前选择它们。如上一项所述,简单的
mouseup 将导致选择图像。
- 使用文本选择而不是“控件选择”(提供调整大小 UI)选择图像。
这是我在深呼吸数小时后能想到的最好的方法。如果你真的想摆脱那些句柄,我认为这已经足够了。
在 IE 中,将 oncontrolselect 设置为在图像上返回 false,确实可以防止出现这些句柄,您可以巧妙地做到这一点,将以下处理程序附加到 mousedown 事件:
function (evt) {
var img;
function returnFalse() {
return false;
}
if (evt.tagName.toLowerCase() === "img") {
img = evt.target;
img.oncontrolselect = returnFalse;
}
}
它实际上并不能完全正常工作。效果不好的原因是为了开始对图像进行拖放操作,必须按住鼠标不移动它,一瞬间,然后才开始移动它。阻力。如果按下鼠标并立即开始拖动,图像将保持在原位而不被拖动。
所以我没有这样做。
我所做的是以下。在所有浏览器中,我使用mouseup 来专门选择目标图像。在非IE和IE11中,同步:
function (evt) {
if (evt.target.tagName.toLowerCase() === "img") {
selectSingleNode(img); // In my case, I used Rangy
}
}
在 IE 7 到 10 中,异步:
function (evt) {
if (evt.target.tagName.toLowerCase() !== "img") {
return;
}
window.setTimeout(function () {
selectSingleNode(img); // In my case, I used Rangy
}, 0);
}
这确保了这些句柄出现后,它们会尽快消失,因为图像失去了“控制选择”,因为该选择被常规文本选择所取代。
在 Internet Explorer 7 到 11 中,我将一个处理程序附加到 dragend 以删除所有选择:
function (evt) {
if (evt.target.tagName.toLowerCase() === "img") {
deselect(); // I use Rangy for this, as well
}
}
这会使拖放后显示的手柄消失。
我希望这会有所帮助,我希望你能做得更好。