страница asp + javascript: как скрыть элемент и получить его реальную позицию?

У меня есть javascript, который находит элемент (панель), получает его позицию и прокручивает страницу до этой позиции. Функция javascript вызывается при нажатии кнопки. все работает нормально, когда панель Visible=true; Но при загрузке страницы панель не должна быть видна пользователю. Когда панель 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");
            }

person niio    schedule 06.08.2012    source источник


Ответы (1)


Пожалуйста, опубликуйте свой код, чтобы мы могли дать вам более полезный ответ, но я собираюсь предложить один из способов, которым вы можете достичь того, что вам нужно. Попробуйте загрузить страницу с div, установленным на style="visibility:hidden;", а затем получить их вертикальное положение в глобальной переменной или атрибуте данных элемента, а затем сразу же установить стиль div на style="display:none;".

Затем вы сможете использовать эти значения позиции в своей функции прокрутки.

person Martin-Brennan    schedule 06.08.2012