将DIV放置在光标处,但在可视区域内
Position DIV at cursor but within viewable area
我使用下面的showDiv函数在光标位置显示div弹出式菜单,但我不知道如何调整它,使菜单不会从可见区域的底部或右侧边缘消失,是否有可能在显示div之前对此进行补偿?
var posx;
var posy;
function getMouse(e){
posx = 0;
posy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY){
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY){
posx = e.clientX;
posy = e.clientY;
}
}
function showDiv(id){
var obj = document.getElementById(id);
obj.style.left=posx+'px';
obj.style.top=posy+'px';
obj.style.display='block';
}
...
<body onMouseMove="getMouse(event)">
function showDiv(id){
var obj = document.getElementById(id),
screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0) - (obj.clientWidth || obj.offsetWidth),
screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - (obj.clientHeight || obj.offsetHeight);
obj.style.left = Math.min(posx, screenWidth) + 'px';
obj.style.top = Math.min(posy, screenHeight) + 'px';
obj.style.display = 'block';
}
这将使div保持在可视区域内。
你只需检查宽度加上位置等是否大于或小于可视区域的值。
我们还添加了scroll left和scroll top的值,这样我们的计算就不会错误地认为它是可见的;如果在你的情况下不需要,你可以删除它。
function showDiv(id, posX, posY) {
var obj = document.getElementById(id),
objWidth = obj.offsetWidth,
objHeight = obj.offsetHeight,
docX = window.pageXOffset || document.documentElement.scrollLeft,
docY = window.pageYOffset || document.documentElement.scrollTop,
winWidth = document.documentElement.clientWidth,
winHeight = document.documentElement.clientHeight;
posX += docX;
posY += docY;
if (posX < docX) {
posX = docX;
} else if (posX + objWidth > winWidth + docX) {
posX = docX + (winWidth - objWidth);
}
if (posY < docY) {
posY = docY;
} else if (posY + objHeight > winHeight + docY) {
posY = docY + (winHeight - objHeight);
}
obj.style.top = posY + 'px';
obj.style.left = posX + 'px';
obj.style.display = 'block';
}
相关文章:
- 如何在谷歌可视化中组合数字和模式格式化程序
- 加载泰坦尼克号可视化数据时出现问题
- 如何使用JQUERY解析大型XML文件并将其可视化为HTML格式
- 如何使用图表包装函数有条件地格式化谷歌可视化表单元格
- AngularJS&Google可视化-使用状态更改处理程序(Google API)在HTML页面上查看$sco
- Javascript图形可视化工具包,具有高性能(500-1000个节点)
- Google可视化addListener调用函数引用错误
- 如何在web上动态可视化数据集
- 可视化到选择框中
- 多个进度条可视地只更新一个进度条
- Javascript——检测用户的可视区域's浏览器
- 如何在谷歌地理地图可视化中显示区域
- 用户内部的垂直中心层's在长页面上的可视区域
- 一个大画布怎么能有一个动画'可视区域'
- JavaScript缩放图像和中心可视区域
- 限制可视区域和缩放级别
- 谷歌可视化API - 德国的地理地图区域
- 如何将 jquery 对话框居中以显示在浏览器当前可视区域的中心
- 限制缩放/可视区域与谷歌地球API
- 将DIV放置在光标处,但在可视区域内