【问题标题】:Detect click on resizable element's resize handle检测点击可调整大小元素的调整大小手柄
【发布时间】:2018-03-06 17:01:28
【问题描述】:

使用两行 CSS 手动调整元素的大小非常容易。像这样:

div {
  resize: both;
  overflow: auto;
  
  /*
  / Styling
  */
  width: 100px;
  height: 100px;
  border: 1px solid #333333;
}
<div></div>

现在我想检测用户何时单击了元素的调整大小句柄。

奇怪的是,Internet Explorer 似乎是唯一将onResize 事件附加到元素(窗口除外)的浏览器。但即使其他浏览器实现了这一点,它也不是我正在寻找的,因为我需要知道何时单击调整大小手柄,而不是调整大小。

我研究了将听众附加到 mousedown 并检查 currentTargettarget 以查看它们是否不同。不走运 - 两者都返回元素本身。

我最后,也是最后,最后,最后的手段是检查点击位置,看看它是否在元素的右下角。但这似乎荒谬且不可靠。

是否有可靠的方法来检测元素调整大小手柄上的点击或事件?

【问题讨论】:

  • 逻辑上将是 Shadow DOM 的一部分,并且只有用户创建的元素 (afaik) 可以处于打开模式。所以我怀疑除了你提到的 JS 方法(检查鼠标位置)之外,你还能找到一种访问调整器的方法。
  • 我使用了你可笑的最后手段。 This answer 给出左上角的点击坐标。减去 offsetWidth,offsetHeight 给出右下角的坐标。这些在主要浏览器中调整大小句柄的范围为 0-20。 (我非常想阻止调整大小触发我用来开始 contentEditable 的点击处理程序。)

标签: javascript css dom-events


【解决方案1】:

我检查了这个link 并在resizeobserver 上找到了一个示例

var ro = new ResizeObserver(entries => {
  for (let entry of entries) {
    const cr = entry.contentRect;
    console.log(`Element size: ${cr.width}px x ${cr.height}px`);
   }
});
ro.observe(testId);
#testId {
  resize: both;
  overflow: auto;
  width: 100px;
  height: 100px;
  border: 1px solid #333333;
}
<div id="testId"></div>

【讨论】:

  • 很棒的发现!以前没见过。不幸的是,它只在调整元素大小时记录,而不是在单击调整大小手柄时记录。
  • 另外,ResizeObserver 目前是 only supported in Chrome
猜你喜欢
  • 2011-10-15
  • 2013-12-20
  • 2021-04-15
  • 2021-10-28
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多