我有一个带有网页浏览器控件的表单,它加载一个网页(工作正常,页面加载正常)
现在我的问题是,我想找到一个特定的网址链接是在折叠之下还是在折叠之上 (我的意思是,用户是否必须向下滚动才能看到此链接) 这个v是否在滚动时是可见的,或者我们需要滚动才能看到它..我希望我很清楚
我已经进行了大量搜索,但看起来没有关于查找html元素位置(当前视图上方或下方)的信息
有人对此有所了解并能指出正确的方向吗? (我正在寻找c#解决方案 - WinForms)
更新:非常感谢John Koerner提供的代码。真的很感激他在解决我的问题上花费的时间和精力。
Jonathan&其他人也..我希望我能将Jonathans的回复标记为答案,但它只允许将一个回复标记为答案。他的评论也很清楚,也很有用。谢谢你们真棒!!!
答案 0 :(得分:7)
好的,我已经在google和stackoverflow上对此进行了测试,它似乎有效:
private bool isElementVisible(WebBrowser web, string elementID)
{
var element = web.Document.All[elementID];
if (element == null)
throw new ArgumentException(elementID + " did not return an object from the webbrowser");
// Calculate the offset of the element, all the way up through the parent nodes
var parent = element.OffsetParent;
int xoff = element.OffsetRectangle.X;
int yoff = element.OffsetRectangle.Y;
while (parent != null)
{
xoff += parent.OffsetRectangle.X;
yoff += parent.OffsetRectangle.Y;
parent = parent.OffsetParent;
}
// Get the scrollbar offsets
int scrollBarYPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollTop;
int scrollBarXPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollLeft;
// Calculate the visible page space
Rectangle visibleWindow = new Rectangle(scrollBarXPosition, scrollBarYPosition, web.Width, web.Height);
// Calculate the visible area of the element
Rectangle elementWindow = new Rectangle(xoff,yoff,element.ClientRectangle.Width, element.ClientRectangle.Height);
if (visibleWindow.IntersectsWith(elementWindow))
{
return true;
}
else
{
return false;
}
}
然后使用它,您只需致电:
isElementVisible(webBrowser1, "topbar") //StackOverflow's top navigation bar
答案 1 :(得分:3)