我有这个 HTML,它呈现一个指向右侧的简单箭头符号:
<!DOCTYPE html>
<html>
<head>
<style>
div { width: 0px; height: 0px; border-left: 20px solid black; border-top: 20px solid transparent; border-bottom: 20px solid transparent; border-right: 20px solid transparent; position: absolute; left: 35px; top: 53px; cursor: pointer; }
</style>
<body>
<div></div>
</body>
</html>
如果您将鼠标悬停在它上面,则光标将变为指针。但是因为它实际上是一个正方形div
,所以即使您刚好在箭头周边的箭头之外,光标也会变成指针div
。
所以我写了这个 Javascript 添加,只有当鼠标悬停在那个箭头上时光标才会变成指针。为此,我从 Firebug 中计算出三角形三个顶点的坐标((35,53)
, (55,73)
,(35,93)
从顶部顺时针方向)。然后我检查有问题的点是否位于由这 3 个顶点形成的三角形内。我通过检查每条边的点和相对顶点是否位于该边的同一侧来做到这一点(如果确实如此,则通过用该点的坐标代替x
和y
在该方程中获得的值的乘积将是积极的)。
<!DOCTYPE html>
<html>
<head>
<style>
div { width: 0px; height: 0px; border-left: 20px solid black; border-top: 20px solid transparent; border-bottom: 20px solid transparent; border-right: 20px solid transparent; position: absolute; left: 35px; top: 53px; }
.hoverclass { cursor: pointer; }
</style>
<script src="jquery.js">
</script>
<script>
$(document).ready(function(){
$("div").click(function(e) { alert(e.pageX + " " + e.pageY); });
function l1(x,y) { return y - x - 18; }
function l2(x,y) { return x+y-128; }
function l3(x,y) { return x-35; }
$("div").hover(function(e) {
var x = e.pageX;
var y = e.pageY;
if (l1(x,y)*l1(35,93) >= 0 && l1(x,y)*l1(35,93) >= 0 && l1(x,y)*l1(35,93) >= 0 ) {
$(this).addClass('hoverclass');
}
else { $(this).removeClass('hoverclass'); }
},
function() {
$(this).removeClass('hoverclass');
});
});
</script>
<body>
<div></div>
</body>
</html>
然而,结果是不可预测的。有时光标只在三角形内转动指针,有时也在三角形外(就像以前一样),有时根本不转动。我怀疑这可能是由于hover
函数超时工作,可能会暂时挂起脚本。有没有其他方法可以实现这一目标?