【问题标题】:Drawing rectangles (divs) with the mouse用鼠标绘制矩形(div)
【发布时间】:2013-10-09 06:23:32
【问题描述】:

我正在尝试使用鼠标事件绘制矩形(div)。这是我的代码:

http://jsbin.com/apediti/2/edit

基本上我在做以下事情:

  1. mousedown 上,我保存鼠标坐标,创建一个大小为:width=0height=0 的新 div,并为mousemovemouseup 绑定事件处理程序。

    李>
  2. mousemove 上,我会根据当前鼠标位置调整 div 的大小。

  3. mouseup 上,我取消绑定mousemovemouseup 的事件处理程序。

它似乎在 Firefox 甚至 IE 10 中运行良好,但在 Chrome 中,mousemove 事件有时在 mousedown 后仅触发 2 或 3 次,因此绘制的 div 不会调整大小。

我找不到原因。任何帮助表示赞赏。

【问题讨论】:

  • 在最新的 Chrome 中为我工作 - 您在控制台中看到任何错误吗?
  • 控制台没有错误,“bug”只是偶尔出现。试试这个例子:画一个矩形,当你画第二个矩形时,确保在第一个 div 上方时释放鼠标。现在尝试创建第三个矩形。该错误应该出现。可以? (谢谢)

标签: javascript mouseevent mousemove


【解决方案1】:

发生这种情况是因为 Chrome 试图在拖动时选择悬停在 rect 上的元素。要解决此问题,只需通过将user-select CSS property 设置为none(这是vendor prefixedwill not work on IE9 or lower)来防止选择rect 元素:

.rect {
    position: absolute;
    border: 2px solid rgba(199, 25, 9, 0.64);
    -webkit-user-select: none;  /* Chrome, Safari, Opera */
    -moz-user-select: none; /* Firefox all */
    -ms-user-select: none; /* IE 10+ */
    user-select: none;  
}

Modified JSBin.

【讨论】:

  • 是的,这是有道理的。它现在工作正常。非常感谢。我很想为此找到一个 javascript 解决方案,以使其跨浏览器兼容。任何关于 javascript 解决方案的想法?
  • @TamasPap 当你使用 jQuery 时,这里 SLaks 的回答应该可以解决问题:stackoverflow.com/questions/2700000/…
  • 谢谢詹姆斯。现在它按预期工作。感谢您的帮助!
猜你喜欢
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多