Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2016, 14:57
Новичок на форуме
Отправить личное сообщение для Schwab Посмотреть профиль Найти все сообщения от Schwab
 
Регистрация: 30.04.2016
Сообщений: 2

Поведение "плавающей" боковой колонки при изменении размеров окна браузера
Здравствуйте, помогите разобраться и решить следующую проблему.
Реализовываю фиксацию боковой колонки на сайте при помощи следующего кода:
var rightcolumnTop = rightcolumn.offset().top;
var columnPosition = contentWidth - rightcolumnWidth + contentLeftMargin;
var rightcolumnStop = headerHeight + popularPostHeight + contentHeight - rightcolumnHeight;
var columnPositionDown = contentWidth - rightcolumnWidth;
$(window).scroll(function(){
   if ( $(this).scrollTop() > rightcolumnTop ) 
      {
        rightcolumn.addClass("columnfixed");
        rightcolumn.css({"top":"0px", "left": columnPosition - 2 +"px", "width": rightcolumnWidth+"px", });
       }
   if($(this).scrollTop() >= rightcolumnStop && rightcolumn.hasClass("columnfixed"))
       {   
          rightcolumn.removeClass("columnfixed");
          rightcolumn.addClass("columnabsolute");
          rightcolumn.css({"top": contentHeight - rightcolumnHeight+"px", "left": columnPositionDown - 2 +"px", "width": rightcolumnWidth+"px", });  
        }
   if($(this).scrollTop() < rightcolumnStop && rightcolumn.hasClass("columnabsolute"))
        {
           rightcolumn.removeClass("columnabsolute");
           rightcolumn.addClass("columnfixed");
           rightcolumn.css({"top":"0px", "left": columnPosition - 2 +"px", "width": rightcolumnWidth+"px", });
         }
                 
      if($(this).scrollTop() <= rightcolumnTop && rightcolumn.hasClass("columnfixed"))
         {
             rightcolumn.removeClass("columnfixed");
          }
});


Наверно идея очень не верно реализована (хоть и получается закрепить колонку когда нужно), но при изменении размеров окна браузера, колонка остаётся на том месте, которое на данный момент было определено в стилях. И проблема решается только при обновлении страницы.
Подскажите как правильно реализовать фиксацию и открепление колонки, чтобы не возникало таких проблем.
Ответить с цитированием
  #2 (permalink)  
Старый 30.04.2016, 16:04
Кандидат Javascript-наук
Отправить личное сообщение для aklis Посмотреть профиль Найти все сообщения от aklis
 
Регистрация: 27.04.2015
Сообщений: 99

есть event resize
Ответить с цитированием
  #3 (permalink)  
Старый 30.04.2016, 19:58
Аспирант
Отправить личное сообщение для Alex_63 Посмотреть профиль Найти все сообщения от Alex_63
 
Регистрация: 22.08.2015
Сообщений: 71

Schwab,
var rightcolumnTop = rightcolumn.offset().top;
var columnPosition = contentWidth - rightcolumnWidth + contentLeftMargin;
var rightcolumnStop = headerHeight + popularPostHeight + contentHeight - rightcolumnHeight;
var columnPositionDown = contentWidth - rightcolumnWidth;
$(window).on("scroll resize",function(){
   var scrlTop = $(this).scrollTop();
   if ( scrlTop > rightcolumnTop ) 
      {
        rightcolumn.addClass("columnfixed");
        rightcolumn.css({"top":"0px", "left": columnPosition - 2 +"px", "width": rightcolumnWidth+"px", });
       }
   if(scrlTop >= rightcolumnStop && rightcolumn.hasClass("columnfixed"))
       {   
          rightcolumn.removeClass("columnfixed");
          rightcolumn.addClass("columnabsolute");
          rightcolumn.css({"top": contentHeight - rightcolumnHeight+"px", "left": columnPositionDown - 2 +"px", "width": rightcolumnWidth+"px", });  
        }
   if(scrlTop < rightcolumnStop && rightcolumn.hasClass("columnabsolute"))
        {
           rightcolumn.removeClass("columnabsolute");
           rightcolumn.addClass("columnfixed");
           rightcolumn.css({"top":"0px", "left": columnPosition - 2 +"px", "width": rightcolumnWidth+"px", });
         }
                 
   if(scrlTop <= rightcolumnTop && rightcolumn.hasClass("columnfixed"))
         {
             rightcolumn.removeClass("columnfixed");
          }
});
Ответить с цитированием
  #4 (permalink)  
Старый 03.05.2016, 21:17
Новичок на форуме
Отправить личное сообщение для Schwab Посмотреть профиль Найти все сообщения от Schwab
 
Регистрация: 30.04.2016
Сообщений: 2

Спасибо за подсказку! Получился такой код:
$(document).ready(function() {

        $(window).on('scroll resize', function(){

                var scrollTop = $(this).scrollTop(); //положение скролла от верха страницы
                var rightcolumn = $("#right_column"); //обращение к правой колонке
                var contentLeftMargin = $("#content").offset().left; //отступ основного блока с контентом от левого края окна браузера
                var contentHeight = $("#content").outerHeight(true); //высота основного блока с контентом с учетом внутрених отступов и рамки
                var contentWidth = $("#content").outerWidth(true); //ширина основного блока с контентом с учетом внутрених отступов и рамки
                var rightcolumnHeight = rightcolumn.outerHeight(true); //высота правой боковой колонки
                var rightcolumnWidth = contentWidth * 25 / 100; //ширина правой колонки 
                var headerHeight = $("header").outerHeight(true); //высота блока блока header с меню
                var popularPostHeight = $("#popular_post").outerHeight(true); //высота блока с информером популярных постов 
                var rightcolumnTopBegin = headerHeight + popularPostHeight + 15; // начальное положение правой колонки от верха страницы с учетом разделительной полосы и внутреннего отступа основного контента
                var columnFixedLeftPosition = contentLeftMargin + contentWidth - rightcolumnWidth; // положение правой колонки от левого края окна браузера при fixed
                var columnAbsoluteLeftPosition = contentWidth - rightcolumnWidth; // положение правой колонки от левого края начала контента при absolute
                var rightcolumnStop = headerHeight + popularPostHeight + contentHeight - rightcolumnHeight; // позиция скролла, при которой нижний край правой колонки сравняется с нижним краем основного контента
               

                if ( scrollTop > rightcolumnTopBegin && !rightcolumn.hasClass("columnfixed")) 
                    {
                        rightcolumn.addClass("columnfixed");
                        rightcolumn.css({"top":"0px", "left": columnFixedLeftPosition +"px", "width": rightcolumnWidth - 2 +"px", });
                    }
                if(scrollTop >= rightcolumnStop && rightcolumn.hasClass("columnfixed"))
                    {   
                        rightcolumn.removeClass("columnfixed");
                        rightcolumn.addClass("columnabsolute");
                        rightcolumn.css({"top": contentHeight - rightcolumnHeight - 10 +"px", "left": columnAbsoluteLeftPosition  +"px", "width": "25%" - 2, });  
                    }
                if(scrollTop < rightcolumnStop && rightcolumn.hasClass("columnabsolute"))
                    {
                        rightcolumn.removeClass("columnabsolute");
                        rightcolumn.addClass("columnfixed");
                        rightcolumn.css({"top":"0px", "left": columnFixedLeftPosition +"px", "width": rightcolumnWidth - 2 +"px", });
                    }
                 
                if(scrollTop <= rightcolumnTopBegin && rightcolumn.hasClass("columnfixed")) 
                    {
                        rightcolumn.removeClass("columnfixed");
                    }

                console.log(" columnFixedLeftPosition " +  columnFixedLeftPosition);
                console.log(" columnAbsoluteLeftPosition " +  columnAbsoluteLeftPosition);
        }); 
  });

Но одна проблема! При ресайзе окна браузера, отрабатывает перестраивание колонки когда она имеет абсолютное позиционирование, а в фиксированном положении колонка остается на месте наезжая на содержимое. В консоле видно, что значение переменной которую я указываю для координаты left, изменяется, но в стилях этого не происходит. В чем может быть причина, не могу пока сообразить?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена стилей страницы при изменении размера окна браузера goooooch Javascript под браузер 6 19.11.2011 18:49
Функция при изменении окна браузера. Metelitca Events/DOM/Window 4 26.07.2011 11:45
Увеличение окна браузера при загрузке Grendel Events/DOM/Window 11 13.05.2011 01:40
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Как сделать? При выходе мышкой за пределы окна браузера, начинает грузится другая стр alb Events/DOM/Window 13 01.09.2010 12:19