Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2013, 19:26
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

Фиксированный блок скачет в Хроме
Плавающая колонка скачет в браузерах, в которых нет плавного скроллинга. Хром, Опера. В FF нормально.
Сама функция:
function leftSideScroll(){
    var elem = $('.description_catalog_inner');

	var brand = $('.brand_inform');
	var brandHeight = brand.height();
    if(elem.length){
		if(brand.length !=0){
			var parBottom = elem.parent().parent().offset().top + brandHeight;
		} else {
			var parBottom = elem.parent().parent().offset().top;
		}
        var parTop = parBottom + elem.parent().parent().height() - 40;
        var elemBottom = elem.offset().top;
        var elemTop = elemBottom + elem.height();
        var height = elem.height();
        var winBottom = $(window).scrollTop() + 70;
        var winTop = winBottom + $(window).height() - 70;
        var newTop = elemBottom;

        if((height < elem.parent().parent().height())){
            if(height > $(window).height()){
                if(newTop > winBottom){
                    newTop = winBottom;
                }
                if(newTop + height < winTop){
                    newTop = winTop - height;
                }
                if(newTop < parBottom){
					newTop = parBottom;
                }
                if(newTop + height > parTop){
                    newTop = parTop - height;
                }
            } else {
                newTop = winBottom;
                if(newTop + height > parTop){
                    newTop = parTop - height;
                }
                if(newTop < parBottom){
                    newTop = parBottom;
                }
            }

			elem.offset({"top": newTop});
        }
    }
}

Инициация по event scroll.
Ссылка на пример. Левая колонка.
В чем может быть проблема? Уже мозги закипают. Хотя бы носом ткните куда копать.
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2013, 21:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

И будет скакать. Scroll вызывается не на каждый пиксель, а скачками.
Быдло-вариант, использующийся на большинстве jquery сайтов: использовать всякий animate для сглаживания движения на этих отрезках(выглядит как будто блок догоняет скролл).
Труъ-вариант: верстать так, чтобы эти блоки на самом деле никуда не скролились.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2013, 23:34
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

Сообщение от Aetae Посмотреть сообщение
Труъ-вариант: верстать так, чтобы эти блоки на самом деле никуда не скролились.
От анимации как раз и отказались. Потому что действительно - быдлорешение. Так понимаю, "никуда не скроллились" - это fixed? Что то никак не осилю момент с двойным прилипанием, т.е. при скролле вниз липнет по нижней границе, вверх - по верхней.
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2013, 01:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Да, либо fixed, либо олдскул:
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<style type="text/css">
*{margin: 0;  padding: 0;}
html, body, .main{
    width: 100%;
    height: 100%;
    overflow: hidden;
}
.main {
    overflow: auto;
}

    .sidebar {
        width:200px;
        margin-right: -200px;

        left: 0;
        bottom : 0;
        float:left;

        position: relative;
        height: 800px;
        background-color:#ddf;
    }
    .content{
        margin-left: 200px;

        position: relative;
        height: 2000px;
        background-color: #dfd;
    }
        .bottom-span{
            position: absolute;
            bottom:0;
            left: 0;
        }
        .middle-span{
            position: absolute;
            bottom:50%;
            left: 0;
        }

</style>

</head>
<body>
    <div class="main">
        <div class="sidebar">
            верх
            <span class="middle-span">середина</span>
            <span class="bottom-span">низ</span>
        </div>
        <div class="content">
            Контент верх
            <span class="middle-span">Контент середина</span>
            <span class="bottom-span">Контент низ</span>
        </div>
    </div>
<script type="text/javascript">
(function(){
    var main = document.getElementsByClassName('main')[0],
        sidebar = document.getElementsByClassName('sidebar')[0],
        fixed = false;

    main.onscroll = function(){
        var scroll = main.scrollTop;

        if(scroll > sidebar.offsetHeight - main.clientHeight) {
            if(fixed) return;

            sidebar.style.position = 'absolute';
            fixed = true;
        }
        else {
            if(!fixed) return;

            sidebar.style.position = '';
            fixed = false;
        }
    }
}())
</script>
</body>
</html>
__________________
29375, 35

Последний раз редактировалось Aetae, 10.04.2013 в 01:48.
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2013, 13:14
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

Спасибо. Толкнули к пониманию проблемы.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показать/скрыть блок Lelja_05 jQuery 10 01.07.2013 20:05
В IE9 скачет правый блок. KamalovRadik (X)HTML/CSS 0 24.03.2013 14:03
выезжающий блок при наведении на родителя andreychaki Общие вопросы Javascript 6 09.01.2013 13:50
Фиксированный блок. И относительный контент. TylerDurden Общие вопросы Javascript 3 16.11.2012 18:24
Фиксированный блок kakarotto Элементы интерфейса 2 09.07.2010 00:20