asp page + javascript:如何隐藏元素并获得真实位置?

时间:2012-08-06 10:07:56

标签: javascript position element visible

我有一个javascript,找到一个元素(面板),获取它的位置,并将页面滚动到该位置。点击按钮时调用javascript函数。当面板可见=真时,一切都很糟糕;但是在页面加载时,面板必须对用户不可见。 当面板为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>

页面上的按钮:

<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");
            }

1 个答案:

答案 0 :(得分:0)

请发布您的代码,以便我们为您提供更有帮助的答案,但我建议您采用一种方式来实现您的目标。尝试加载设置为style="visibility:hidden;"的div的页面,然后将其垂直位置放入元素的全局变量或数据属性中,然后立即将div的样式设置为{ {1}}。

然后,您应该可以在滚动功能中使用这些位置值。