asp页面+;javascript:如何隐藏元素并使其处于真实位置?
我有一个javascript,可以找到一个元素(面板),获取它的位置,并将页面滚动到该位置。javascript函数在单击按钮时调用。当面板可见时,一切正常=真实;但在加载页面时,面板必须对用户不可见。 当panel为Visible=false时,javascript函数不起作用,因为页面上不存在该面板。 当面板为style=“display:none”时,它存在,对用户不可见,但它的位置不是它的真实位置。 当面板为style=“visibility:hidden”时,面板存在,位于真实位置,但页面上有一个很大的空白,面板隐藏在此处asp页面+;javascript:如何隐藏元素并使其处于真实位置?,javascript,position,element,visible,Javascript,Position,Element,Visible,我有一个javascript,可以找到一个元素(面板),获取它的位置,并将页面滚动到该位置。javascript函数在单击按钮时调用。当面板可见时,一切正常=真实;但在加载页面时,面板必须对用户不可见。 当panel为Visible=false时,javascript函数不起作用,因为页面上不存在该面板。 当面板为style=“display:none”时,它存在,对用户不可见,但它的位置不是它的真实位置。 当面板为style=“visibility:hidden”时,面板存在,位于真实位置,但
如何使面板在没有页面空白的情况下对用户不可见,并在页面上得到真正的位置?
编辑:我的解决方案+代码- 嗯,我成功了,但一定有更好的解决办法。 这是密码<script type="text/javascript">
function elementPosition(obj) {
var curleft = 0, curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft;
curtop = obj.offsetTop;
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
}
}
return { x: curleft, y: curtop };
}
function ScrollToControl(id) {
jid = id;
var elem = document.getElementById(jid);
//here I set the display = 'block', and I also set this in button_click event
//when I didn't set it also in button_click event, I get the right panel position
//but the panel remains invisible
elem.style.display= 'block';
var scrollPos = elementPosition(elem).y;
window.scroll(0, scrollPos);
}
</script>
请张贴您的代码,以便我们能给您一个更有用的答案,但我将建议一种方法,您可能能够实现您所追求的。尝试加载div设置为
style=“visibility:hidden;”“
”的页面,然后将其垂直位置设置为全局变量或元素的数据属性,然后立即将div的样式设置为style=“display:none;”“
然后,您应该能够在滚动功能中使用这些位置值
<asp:Button ID="btnClientDossiers_EMAIL" runat="server" CssClass="button" Enabled="False"
Text="EMAIL" OnClick="btnClientDossiers_EMAIL_Click" />
Page_Load
{
//how can I dynamically get the ctl00_ContentPlaceHolder?
// Or will the client name of plEMAIL always start with ctl00_ContentPlaceHolder?
btnClientDossiers_EMAIL.Attributes.Add("onclick", " return
ScrollToControl('ctl00_ContentPlaceHolder_plEMAIL');");
}
protected void btnClientDossiers_EMAIL_Click(object sender, EventArgs e)
{
plEMAIL.Attributes.Add("style", "display:block");
}