javascript - 如何防止弹出框溢出视口边界?
问题描述
我正在尝试向 Highcharts 图表动态添加注释。如果您转到我的Codepen 示例并单击图表极值附近的数据点之一,您会看到弹出框可能会变得模糊。
我试图为此使用引导弹出窗口“.popover()”,但似乎没有办法将弹出窗口定位在鼠标点击点。所以我从这个问题中得到了一些指示。
$('#popover').css('left', (selected_point.x+15) +'px')
$('#popover').css('top', (selected_point.y-(selected_point.h/2)-12) +'px')
$('#popover').show()
$("#annotation_text").focus()
我遇到的问题是,当单击图表边缘之一附近的数据点时,弹出框可能会被切断。如何防止弹出窗口溢出视口?
我尝试了 KrzysztofJaniszewski 的建议。然而,popover 仍然有一些不受欢迎的特性。例如,它会在调整大小时远离数据点。如果数据被滚动,它不会停留在数据点上。
我决定尝试别的东西。我已将表单放在一个注释中,该注释在单击时添加到某个点。保存表单后,注释将被删除并替换为包含表单数据的新注释。
这有一些很酷的优点,例如由 Highcharts 处理的弹出框的定位,因此没有边界问题。在调整大小或滚动数据时,表单也会保留其数据点。我更新了Codepen 示例以显示这些效果。我忘记分叉 Codepen,所以我的原件已被覆盖,抱歉。
在这一点上,我试图克服的唯一问题似乎与图层顺序或某种 z-index 有关。我应用了一些 jquery 来帮助专注于表单输入,但我仍然遇到问题。例如,尝试创建注释或注释。然后尝试用鼠标选择文本。不是鼠标选择文本,而是鼠标似乎在控制弹出框后面的图表,而是缩放图表。
关于如何使此表格位于图表顶部的任何想法?这是有道理的,因为它实际上不是一个注释,但在这种情况下,最好只覆盖表单。
解决方案
在这里我复制了你的CodePen
它或多或少按照您想要的方式工作。
原理很简单。如果弹出框即将超出视口,则更改其位置以使其位于视口内。
...
if (xPos > maxRight) {
xPos = maxRight;
}
if (yPos > maxDown) {
yPos = maxDown;
}
...
推荐阅读
- c# - 使用 Xamarin.Forms 在 Android Webview 中显示在线 PDF
- python-3.4 - python脚本不止一个函数
- mysql - 当有两个 Fk;s 并且其中任何一个始终为空时该怎么办?
- html - 如何防止用户在带有类型编号的html文本字段中输入阿拉伯数字
- javascript - 变量随时间变化的竞争条件
- python - 如何检查列表中的元素是否来自给定元素之后
- node.js - 节点模块别名错误:找不到模块'@src/utils/constants'
- sql - 如何编写查询来引用两个键和两个值?
- amazon-web-services - 将 AWS API Gateway 的权限设置为 HTTP 代理到 Elasticsearch
- c - 在递归调用自身的函数中省略“return”语句