实现效果:在div1里面右键就会显示div2,div2显示在右键点击位置的旁边,并且div2不能超出div1的范围,左键点击div1的其它部分div2就会消失,左键点击div2,这时候div2不会消失.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="./jquery/jQuery.min.js"></script>
<title>右键显示Div示例</title>
</head>
<body>
<div id="div1">
<div id="div2">我是内容</div>
</div>
</body>
<script>
$(document).ready(function () {
var $div1 = $('#div1'), $div2 = $('#div2');
// 右键点击div1时显示div2,并确保div2不超出div1边界
$div1.on('contextmenu', function (e) {
e.preventDefault();
var offset = $div1.offset(),
div1Width = $div1.outerWidth(),
div1Height = $div1.outerHeight(),
x = e.pageX - offset.left,
y = e.pageY - offset.top;
// 确保div2在div1范围内
if (x + $div2.outerWidth() > div1Width) x = div1Width - $div2.outerWidth();
if (y + $div2.outerHeight() > div1Height) y = div1Height - $div2.outerHeight();
if (x < 0) x = 0;
if (y < 0) y = 0;
$div2.css({ top: y, left: x }).show();
});
// 左键点击页面时隐藏div2
$(document).on('click', function (e) {
if (e.target.id !== 'div2') { // 确保只在点击非div2区域时隐藏
$div2.hide();
}
});
});
</script>
<style>
#div1 {
position: relative;
width: 500px;
height: 500px;
background-color: #ccc;
margin: 100px;
}
#div2 {
display: none;
position: absolute;
background-color: #f9f9f9;
border: 1px solid #ddd;
padding: 10px;
z-index: 1000;
}
</style>
</html>
- 通过计算
div1
的偏移量(offset()
)和尺寸(outerWidth()
、outerHeight()
),我们可以确定鼠标点击位置相对于div1
的位置,并据此设置div2
的位置,确保它不会超出div1
的边界。 - 在设置
div2
的top
和left
值之前,我们通过比较确保了div2
的右下边缘不会超过div1
的右下边缘,同时确保其左上边缘不会小于0,防止负值导致的定位问题。 - 左键点击事件中,我们增加了判断
e.target.id
,确保只有在点击非div2
区域时才隐藏div2
,这样用户可以直接点击div2
而不会立即消失,提升了用户体验。