Профиль пользователя. Размер окна

в рубрике Тонкая настройка сайта

Раз Вы работаете с сайтами на uCoz, то уже в курсе, что профиль пользователя открывается в отдельном окне. Как правило, содержимое в него не помещается и пользователю приходится использовать полосы прокрутки или менять размер окна вручную, чтобы увидеть все целиком. Вывод: нужно автоматически изменить размер окна профиля. В шаблоне есть скрипт, который автоматически подгоняет размер окна с профилем под определенную ширину, но очень и очень далеко от совершенства. Я предлагаю Вам универсальное решение этой проблемы.

Использовать мы будем тот же JavaScript. К счастью, jQuery на uCoz используют по умолчанию, что еще больше упросит задачу. Алгоритм будет следующий: вычисляем ширину плавающей панели, определяем ширину контейнера с данными и задаем окну размер, который побольше. Естественно, при вычислениях учитываются элементы самого окна, такие как панели инструментов, границы и т.п.

Первый шаг: поместите все содержимое <body> в контейнер с любым понятным вам классом или ID.  Я выбрал для этого <div class="profile">, а Вы можете использовать, что хотите, только в тексте скрипта измените «позывной».

Шаг второй: поместите готовый скрипт в конец шаблона «Персональная страница пользователя», а старый (найти его будет домашним заданием) — уберите.

<script type="text/javascript">
$(function() {
  var rr = setInterval(function() {
    <!-- Ждем пока появится панель с меню и определяем его ширину -->
    if($("#puzadpn").length > 0) {
      //Суммируем ширину внутренних элементов, включая отступы
      ww = $(".u-menucont").width() + $(".pbarContainer").outerWidth() + parseInt($("#uzadmp").css("paddingLeft")) + parseInt($(".pbarContainer").css("right"));
      $("#uzadmp").children("div").each(function() {
        if($(this).attr("id") == '') ww += $(this).outerWidth();
      });
      //Получаем ширину внешних элементов окна
      ww = ww + window.outerWidth - window.innerWidth;

      <!-- Ширина контейнера с данными определяется аналогично -->
      pw = 0;
      $(".profile").children().each(function() {
        pw += $(this).outerWidth();
      });
      //Вычисляем отступы контейнера
      pw += $(".profile").outerWidth() - $(".profile").width();
      //Определяем высоту окна
      wh = ($(".profile").height() + 45) + window.outerHeight - window.innerHeight;
      // Меняем размер
      if(ww > pw)
        window.resizeTo(ww, wh);
      else
        window.resizeTo(pw, wh);

      clearInterval(rr);
    }
  }, 1000);
});
</script>

Скрипт получился длиннее, чем я обычно выкладываю, но зато положенную на него функцию выполняет на 100%. Вам больше не придется каждый раз корректировать цифры в шаблоне, если разработчики добавят/уберут на плавающей панели какие-то элементы или то же случится с контейнером данных — скрипт будет менять размер окна профиля автоматически, в зависимости от содержимого.

Обсудить на форуме


Комментарии

avatar
1
можешь по подробней расписать как это сделать?
avatar
2
Что не получается?

avatar