jQuery单击div的边框

时间:2014-06-14 06:31:59

标签: javascript jquery html css border

我有一个div,其中包含大量文本。我的问题是,是否可以检测到div边框上的点击?

我想要完成的是如果用户点击底部边框(使用CSS设置为4px宽),则div会一直滚动到底部。如果不添加更多标记,这是否可行?

3 个答案:

答案 0 :(得分:7)

你可以试试这个:

$('div').click(function(e){
  if(e.offsetY >$(this).outerHeight() - 4){
    alert('clicked on the bottom border!');
  }
});

Demo.

.outerHeight()只返回内容的高度(包括边框)。 e.offsetY返回相对于元素的单击的Y.关于outerHeight的注意事项,如果传递bool true参数,它将在计算值中包含margin,默认值为false,因此它只返回content height + padding + border }。

更新 :看起来FireFox有自己的行为方式。您可以看到,单击时,将鼠标按住元素,可以非常自然地方便地知道点击的点 相对于元素的坐标 。但看起来我们没有方便的方法在所谓的FireFox中获取坐标,因为e.offsetXe.offsetY根本不起作用(没有价值)。相反,您必须使用pageXpageY分别减去.offset().left.offset().top 来获取坐标相对于元素。

Updated demo

答案 1 :(得分:0)

我从未尝试过,但我不明白为什么它不应该工作:

  1. 计算元素的高度。

  2. 计算底部边框

  3. 计算元素本身内部的偏移量,如此处

    jQuery get mouse position within an element

  4. 现在,您可以使用一些数学检查鼠标位置是否在底部边框内 我不确定盒子大小是如何适应这种情况的,但这就是我如何开始的。

答案 2 :(得分:0)

您的元素周围有一个包装器,并将填充设置为您想要检测的内容。

<强>的jQuery

&#13;
&#13;
$("#border").click(function (e) {
  if(e.target !== e.currentTarget) return;
  console.log("border-clicked")
});
&#13;
#border {
  padding: 4px;
  background: blue;
  box-sizing: border-box;
  cursor: pointer;
}

.box{
  height: 100px;
  width: 100%;
  background: white;
  cursor: default;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="border">
<div class="box"></div>
</div>
&#13;
&#13;
&#13;

Vanilla JS

&#13;
&#13;
var border = document.getElementById("border");

border.onclick = function(e) {
  if(e.target !== e.currentTarget) return;
  console.log("border-clicked")
}
&#13;
#border {
  padding: 4px;
  background: blue;
  box-sizing: border-box;
  cursor: pointer;
}

.box{
  height: 100px;
  width: 100%;
  background: white;
  cursor: default;
}
&#13;
<div id="border">
<div class="box"></div>
</div>
&#13;
&#13;
&#13;