通过getBoundingClientRect()获取正确的视口坐标
Getting the Correct Viewport Coordinates via getBoundingClientRect()
对交互式信息图进行最后的润色,我将HTML页面上SVG对象的对齐方式从左改为居中。这一变化打破了每个州出现的小弹出窗口的位置。这是左对齐的版本,它工作正常:
http://www.50laboratories.com/demographicclout/demographicclout-left.html
还有居中的版本,它错误地放置了弹出窗口:
http://www.50laboratories.com/demographicclout/demographicclout-centered.html
以下是使用getBoundingClientRect()确定弹出位置的代码:
targetbackground = document.getElementById(selectedstate + mapyear);
targetwidth=targetbackground.getBoundingClientRect().width;
targetex = targetbackground.getBoundingClientRect().left + (targetwidth/2)+excorrection;
targetwye = targetbackground.getBoundingClientRect().top + wyecorrection;
d3.select("#datapopup").attr("transform", "translate(" + targetex + "," + targetwye + ")");
显然,getBoundingClientRect()返回的是浏览器窗口左上角的距离,而不是SVG视口的左上角。如何始终如一地获得正确的坐标值,即从视口的原点获得坐标值?
使用SVG的getBBox()
方法:
targetbackground = document.getElementById(selectedstate + mapyear);
targetwidth = targetbackground.getBBox().width;
targetex = targetbackground.getBBox().x + (targetwidth/2) + excorrection;
targetwye = targetbackground.getBBox().y + wyecorrection;
d3.select("#datapopup").attr("transform", "translate(" + targetex + "," + targetwye + ")");
相关文章:
- 将视口底部滚动到元素底部
- 使用JavaScript根据窗口/视口的高度动态调整图像大小
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 宽度为100%的CSS元素位于视口之外
- CSS3:当页面向下滚动到第一个视口时,是否可以在元素上触发转换
- 如何设置浏览器视口大小
- Javascript em根据窗口/视口尺寸调整大小,不影响文档样式的text/css
- 检测视口并重定向到不同的主页
- 如何在按住鼠标按钮且光标在视口外时检测鼠标离开
- iOS iPad平板电脑渲染视口不正确
- 移动设备上的视口问题
- 视口大小更改时自动刷新页面
- 在移动设备上获取视口大小
- 在 ReactJS 中获取视口/窗口高度
- 使jquery延迟加载插件在视口内工作
- Div 设置为视口高度,即使调整屏幕大小也是如此
- 通过getBoundingClientRect()获取正确的视口坐标
- 将局部(视口相对坐标)转换为全局(图层坐标)
- 如何在jQuery中获得鼠标点击相对于视口的光标坐标
- JavaScript - 检查绝对坐标(左、上、右、下)是否在当前视口上可见