我有一个带有大量文本的可滚动div。我的问题是,是否可以检测到对div边框的点击?
我想要实现的是,如果用户点击底部边框(使用CSS样式化为4px宽),则div会滚动到底部。这是否可能而不添加更多标记?
我想要实现的是,如果用户点击底部边框(使用CSS样式化为4px宽),则div会滚动到底部。这是否可能而不添加更多标记?
$('div').click(function(e){
if(e.offsetY >$(this).outerHeight() - 4){
alert('clicked on the bottom border!');
}
});
.outerHeight()
只返回内容的高度(包括边框)。e.offsetY
返回相对于元素点击的Y坐标。注意outerHeight
,如果传递一个布尔值true
参数,它将在计算值中包括margin
,默认值为false
,因此它只返回content height + padding + border
。
更新:看起来FireFox有自己的行为方式。您可以看到,当点击、按住鼠标在一个元素上时,知道相对于元素的点击点的坐标非常自然和方便。但是,看起来我们没有方便的方法在所谓的FireFox中获取那些坐标,因为e.offsetX
和e.offsetY
根本不起作用(没有值)。相反,您必须使用pageX
和pageY
分别减去.offset().left
和.offset().top
,以获取相对于元素的坐标。
offsetX
。 - King King$("#border").click(function (e) {
if(e.target !== e.currentTarget) return;
console.log("border-clicked")
});
#border {
padding: 4px;
background: blue;
box-sizing: border-box;
cursor: pointer;
}
.box{
height: 100px;
width: 100%;
background: white;
cursor: default;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="border">
<div class="box"></div>
</div>
纯Javascript
var border = document.getElementById("border");
border.onclick = function(e) {
if(e.target !== e.currentTarget) return;
console.log("border-clicked")
}
#border {
padding: 4px;
background: blue;
box-sizing: border-box;
cursor: pointer;
}
.box{
height: 100px;
width: 100%;
background: white;
cursor: default;
}
<div id="border">
<div class="box"></div>
</div>
我从未尝试过,但我不认为它不起作用:
计算元素的高度。
计算底部边框。
计算元素内部的偏移量,就像这里一样
现在,您可以使用一些数学方法检查鼠标位置是否在底部边框内。
我不确定box-sizing如何适用于此,但这是我开始的方式。
e.pageX
来实现。 - Rajaprabhu Aravindasamy