检查哪一边在鼠标指针周围有更多的空间
Check which side has more space around mouse pointer
我正在构建一个自定义工具提示功能,我应该在图像上显示视频作为工具提示。现在,我有一些初始的东西工作,但是我在寻找鼠标指针周围应该显示工具提示的区域时卡住了。
我让工具提示总是在鼠标光标的右下角可见,无论鼠标当前在屏幕的哪个位置,这就是我目前所做的:
window.onmousemove = function (e) {
var x = e.clientX, y = e.clientY;
tooltipSpan.style.top = (y + 10) + 'px';
tooltipSpan.style.left = (x + 10) + 'px';
};
其中tooltip是我的目标元素。我正在寻找的是,我的代码应该找到屏幕上可用鼠标周围的最大区域,并调整工具提示以显示在那里。这方面的任何提示都将大有帮助。
注意:jQuery不是一个选项,我必须建立在核心JS
- 你可以得到的宽度和尺寸的视口使用
window.innerWidth
和window.innerHeight
(在我的例子下面this
指的是window
,因为代码在window
内运行) -
使用视口尺寸和使用
ev.clientX/Y
的鼠标位置,您可以确定光标左/右和上/下侧的像素空间,如下例所示。 -
使用
offsetWidth
和offsetHeight
属性,我们得到工具提示的尺寸,我们可以使用它来设置工具提示相对于光标位置的位置。例如,如果topleleft象限是最大的,则工具提示将显示相对于光标的左上角(意味着工具提示的右下角将"触摸"光标)。
我希望这个例子对你有帮助:).
var tooltip = this.document.getElementsByClassName("tooltip")[0];
window.onmousemove = function(ev) {
// Getting pixel space
var leftPixelSpace = ev.clientX;
var rightPixelSpace = this.innerWidth - leftPixelSpace;
var topPixelSpace = ev.clientY;
var bottomPixelSpace = this.innerHeight - topPixelSpace;
// Determining the position of topleft corner of the tooltip
var tooltipPosX = leftPixelSpace > rightPixelSpace ? leftPixelSpace - tooltip.offsetWidth : leftPixelSpace;
var tooltipPosY = topPixelSpace > bottomPixelSpace ? topPixelSpace - tooltip.offsetHeight : topPixelSpace;
// Setting tooltip position
tooltip.style.left = tooltipPosX+"px";
tooltip.style.top = tooltipPosY+"px";
};
.tooltip {
width: 150px;
height: 100px;
border: 1px solid black;
background-color : lightblue;
text-align: center;
position: absolute
}
<div class="tooltip">floating tooltip</div>
像这样?switch
,包含计算鼠标光标所在象限的条件。
var wM = window.innerWidth / 2;
var hM = window.innerHeight / 2;
document.addEventListener('mousemove', function(e) {
var w = e.clientX;
var h = e.clientY;
var pos;
switch (true) {
case (w <= wM && h <= hM):
pos = 'top-left';
break;
case (w <= wM && h >= hM):
pos = 'bottom-left';
break;
case (w > wM && h < hM):
pos = 'top-right';
break;
case (w > wM && h > hM):
pos = 'bottom-right';
break;
default:
pos = undefined;//Here you could even assign a default quadrant to relay on, in case any condition is met.
}
console.log(pos);
});
-
wM
for widthMiddle,窗口宽度的中点。 -
hM
:相同,但高度不同。 -
w
表示鼠标宽度/X位置;h
for height/y - 根据象限系统的条件的开关。
相关文章:
- JavaScript名称空间和对象创建
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 具有大型几何图形的基于沙发的空间查询
- 如何使用javascript命名空间
- JSDoc:模块和名称空间之间的关系是什么
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 动画制作/减缓元素填充移除元素留下的空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 在IndexedDB中保留空间
- EmberJS-适用于各种模型的适配器动态名称空间
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- 在html页面的属性周围添加了一个额外的空间
- 在活动项目周围添加额外的空间
- 检查哪一边在鼠标指针周围有更多的空间
- 当点击图像周围的空白空间时,Javascript幻灯片显示故障