We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
  • Не совсем в тему о MODx конечно, но может кто знает.. Даже не знаю, с чего и как начать smiley
    Вобщем, нужно с помощью JavaScript отцентрировать всплывающий слой (z-index) с формой отправки сообщения по событию onClick в текущей видимой области браузера (т.е. после скроллинга вниз слой должен быть показан не где-нибудь сверху, а именно посередине окна в текущем месте; при скроллинге двигать слой не нужно; слой по умолчанию невидимый).

    Вот привожу кусок кода, надеюсь будет понятно, что откуда smiley
    var form = document.getElementById("myform");
    var DivHeight = form.offsetHeight; //получаем высоту формы
    var DivWidth = form.offsetWidth; //получаем ширину формы
    var browser=navigator.appName; //название браузера пользователя

    //Попытка обойти баг IE6.0, который для document.body.scrollTop всегда возвращает нуль sad
    //document.documentElement.scrollTop - а это он понимает, но уж как-то очень по своему,
    //получает странно большое значение, из-за чего форма сползает далеко вниз экрана
    var scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
    var scrollLeft = document.body.scrollLeft ? document.body.scrollLeft : document.documentElement.scrollLeft;

    //Это уже от безысходности.. Так более-менее получается отцентровать форму в видимой области
    //хотя она и не выравнивается точно, особенно заметно расхождение на разных разрешениях монитора
    if (browser=="Microsoft Internet Explorer") {
    scrollTop = scrollTop/2;
    }

    //Центрируем по вертикали и горизонтали в зависимости от скроллинга и размера формы;
    //работает для Opera и по великой идее должно работать для IE
    form.style.top = (scrollTop + document.body.clientHeight/2 - DivHeight/2)+’px’;
    form.style.left = (scrollLeft + document.body.clientWidth/2 - DivWidth/2)+’px’;

    //У Firefox свои причуды, у него свои функции для получения размера окна и текущего скроллинга
    if (document.getElementById && !document.all) {
    form.style.top = (window.pageYOffset + window.innerHeight/2 - DivHeight/2)+’px’;
    form.style.left = (window.pageXOffset + window.innerWidth/2 - DivWidth/2)+’px’;
    }[/QUOTE]
    В итоге все это работает как и задумывалось - в Opera 9 и Firefox 1.5.
    А в IE 6.0 вследствие бага - не работает, точнее - форма уползает вниз экрана.

    Перекопал кучу инфы в рунете и буржунете, нашел-таки подсказку, где искать.
    Оказывается, дело в том, что IE 6.0 при явном указании типа документа DOCTYPE криво обрабатывает document.documentElement.scrollTop.
    А у меня как раз DOCTYPE указан как:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/QUOTE]
    Тупо перебирал и подставлял ему разные типы, от HTML 4.01 Transitional до XHTML 1.0 Strict, ничего не помогало...

    И вдруг идеально сработало, когда я вообще убрал DOCTYPE. Полный бред smiley Я бы так и оставил.. Работает ведь во всех браузерах. Но требуется валидность кода, которую можно обеспечить только прописав правильный тип документа.

    И вот собственно теперь такая задачка - каким образом заставить IE обработать HTML документ либо как неимеющий декларированного типа, либо переписать мой код так, чтобы форма не уползала вниз, но при этом оставить для W3C валидности DOCTYPE?
      Разработка сайтов и программных модулей на MODX.
      Опыт работы на MODx с 2005 года. Высокое качество.
      Компания Baltic Design Colors: http://www.bdcolors.ru.
      • 22301
      • 1,084 Posts
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
      попробуй сделать вот так, меня обычно спасает, хотя, понимаю, что это ламерство smiley
      ие именно тогда и вырубает, когда его мордой тычишь:)
      документ будет валиден при этом.
        [img]http://jurist-info.ru/pic/rrr.jpg[/img]

        Безжалостный пияр!
        Artima -- неуч!
        Осторожно: преступная локализация -- modx-cms.ru
        Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

        Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
        • 22301
        • 1,084 Posts
        а в принципе, проблему можно решить и силами css. тебе надо создать один фиксированно позиционируемый слой, задав для него ширину и высоту. в него вложить относительно позиционируемый слой, и ещё раз внутрь вложить абсолютный, отпозиционировав по left и top.
        всё это придётся поместить в начало кода. засада: если юзер будет менять размер экрана, то без F5 позиция высплывшего слоя не изменится.
          [img]http://jurist-info.ru/pic/rrr.jpg[/img]

          Безжалостный пияр!
          Artima -- неуч!
          Осторожно: преступная локализация -- modx-cms.ru
          Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

          Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
        • Вобщем не получилось sad 1 вариант не работает. Дело в том, что IE правильно обрабатывает код только когда document.compatMode возвращает значение "BackCompat". Как я понимаю, этого можно добиться только если нет декларированного типа HTML документа (если есть тип - обычно возвращает "CSS1Compat"). Пытался динамически менять этот параметр, но не тут то было smiley Оказалось, что данный параметр document.compatMode только для чтения.. блин. У меня такие мысли крутятся - может динамически с помощью JavaScript удалять строку с описанием типа документа в случае IE.. если такое вообще возможно. Может быть через DOM? Есть ли какой способ (childNodes?) добраться до DOCTYPE и например просто удалить его? smiley
          ... ишчо одна глупая мысль пришла smiley может уже при запросе браузера проверять тип браузера, если IE - выдавать ему страницу без DOCTYPE, т.е. с другим шаблоном, не имещим DOCTYPE.. так вообще реально? smiley)
            Разработка сайтов и программных модулей на MODX.
            Опыт работы на MODx с 2005 года. Высокое качество.
            Компания Baltic Design Colors: http://www.bdcolors.ru.
            • 22301
            • 1,084 Posts
            grin ничем помочь не могу sad значения большинства слов, которые ты употребил, мне не знакомы smiley
              [img]http://jurist-info.ru/pic/rrr.jpg[/img]

              Безжалостный пияр!
              Artima -- неуч!
              Осторожно: преступная локализация -- modx-cms.ru
              Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

              Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
            • Ладно, фиг с ним.
              ... ишчо одна глупая мысль пришла  может уже при запросе браузера проверять тип браузера, если IE - выдавать ему страницу без DOCTYPE, т.е. с другим шаблоном, не имещим DOCTYPE.. так вообще реально? )

              вот как это реализовать можно? В принципе средствами PHP как я понимаю можно.
                Разработка сайтов и программных модулей на MODX.
                Опыт работы на MODx с 2005 года. Высокое качество.
                Компания Baltic Design Colors: http://www.bdcolors.ru.
                • 22301
                • 1,084 Posts
                а чё ты паришься? сделай проверку при загрузке, заведя под это дело плагин, и в зависимости от результата проверки выводи темплейт. как проверять юзерагента средствами пхп, можно в инете найти, а как переключать темплейт -- темплейтсвичер можно поискать в репозитории.
                  [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                  Безжалостный пияр!
                  Artima -- неуч!
                  Осторожно: преступная локализация -- modx-cms.ru
                  Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                  Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
                  • 897
                  • 1,620 Posts
                  так надо? http://ssrtech.org/
                  note: в фаре фоксе что-то у меня ошибка какая-то в синтаксесе, js отваливается, а в IE работает нормально
                    "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                    Не используйте Revo для "просто сайтов". Используйте Evo

                    Who can defeat the Russian bear?
                    • 897
                    • 1,620 Posts
                    и заметьте, чистый CSS для всего того, js только для скрытия блока
                      "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                      Не используйте Revo для "просто сайтов". Используйте Evo

                      Who can defeat the Russian bear?
                    • aleksey.stepanov - гуд, очень гуд! smiley завтра попробую на твоем примере разобраться со своей формой..
                        Разработка сайтов и программных модулей на MODX.
                        Опыт работы на MODx с 2005 года. Высокое качество.
                        Компания Baltic Design Colors: http://www.bdcolors.ru.