Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2013, 09:49   #1
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию Плавное движение липкого блока при скроллинге

Есть див, с горизонтальным скроллингом, внутри которого две таблицы с шириной, большей чем у дива. Первая таблица (.topTable) должна прилипнуть к верху страницы, когда мы до нее доскроллим страницу и накладываться поверх второй при скроллинге. Все работает, но везде, кроме ФФ, прыгает верхняя таблица, а не плавает, рывками перемещается. Подскажите, как оптимизировать, чтобы везде плавно было.

Код:
function getScrollWindow() {
	  if (window.pageXOffset != undefined) {
		return pageYOffset
	  }

	  var html = document.documentElement;
	  var body = document.body;

	  var top = html.scrollTop || body && body.scrollTop || 0;
	  top -= html.clientTop;	 

	  return top;
	}

$(function(){			
	var posY = $('.topTable').offset().top;
	var newPosY = 0;
	if(getScrollWindow() >= posY)
	{
		newPosY = getScrollWindow() - posY;
		$('.topTable').css('top', newPosY+'px');
	}
	$(window).scroll(function(){			
		if(getScrollWindow() >= posY)
		{
			newPosY = getScrollWindow() - posY;
			$('.topTable').stop().css('top', newPosY+'px');				
		}
		else if(getScrollWindow() < posY)
			$('.topTable').stop().css('top', '0');
	});
});
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 21.01.2013, 12:14   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Код:
.stop().css()
Зачем останавливать анимации, которых нет?Оо
Тогда уж и делайте
Код:
.stop().animate()
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 21.01.2013, 14:43   #3
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

это я убрать забыл, когда пробовал через анимацию. Через анимация липкий блок неуспевает за скроллом, поэтому пришлось отказаться. тут .stop() никакой роли не играет. что с ним что без него притормаживает.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 21.01.2013, 14:51   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Залейте пример на jsfiddle.net
Не понятно, что нужно
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 21.01.2013, 16:26   #5
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Почему бы не использовать position:fixed? Или вы расчитываете на аудиторию ИЕ6?
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 21.01.2013, 17:50   #6
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

http://jsfiddle.net/hLXLt/3/ - вот тут пример того, что у меня есть. и вот верхняя таблица, которая плавает, рывками перемещается.

position: fixed нельзя из-за горизонтального скролла
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 21.01.2013, 19:25   #7
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Задай Position:fixed для .topTable и исправь код так:
Код:
function getScrollWindow() {
	  //if (window.pageXOffset != undefined) {
		//return pageYOffset
	  //}

	  var html = document.documentElement;
	  var body = document.body;

	  var left = html.scrollLeft || body && body.scrollLeft || 0;
	  left -= html.clientLeft;	 

	  return left;
	}

	$(function(){			
		var posX = $('.topTable').offset().left;
		var newPosX = 0;
		if(getScrollWindow() >= posX)
		{
			newPosX = getScrollWindow() - posX;
			$('.topTable').css('left', newPosX+'px');
		}
		$(window).scroll(function(){			
			if(getScrollWindow() >= posX)
			{
				newPosX = getScrollWindow() - posX;
				$('.topTable').css('left', -newPosX+'px');				
			}
			else if(getScrollWindow() < posX)
				$('.topTable').css('left', '0');
		});
       });
ЗЫ: я не вдавался что в этом коде происходит, просто логику поменял. У меня в хроме все работает отл.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 22.01.2013, 09:50   #8
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
position: fixed нельзя из-за горизонтального скролла
лол што? (10 символов)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 22.01.2013, 14:53   #9
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

http://jsfiddle.net/fjrTh/2/ - вот тут пример того, как дочерний div с position: fixed игнорирует overflow: scroll родительского div'a

а в целом, у меня на горизонтальный скролл родительского еще висит событие и притормаживать начинает при горизонтальной прокрутке
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 23.01.2013, 09:13   #10
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от xDyPx Посмотреть сообщение
http://jsfiddle.net/fjrTh/2/ - вот тут пример того, как дочерний div с position: fixed игнорирует overflow: scroll родительского div'a

а в целом, у меня на горизонтальный скролл родительского еще висит событие и притормаживать начинает при горизонтальной прокрутке
Какая-то каша из вроде бы знакомых слов...
1. дочерний div с position: fixed игнорирует something родительского div'a.
position: fixed; по спецификации вырывается из потока элементов и всегда находится в контексте разметки окна/фрейма.
2. fixed игнорирует overflow: scroll
Код:
.parentBlock{
	width: 300px;
    border: 1px solid #aaa;
    overflow: scroll;
    margin-left: 100px;
    height: 100px;
    overflow:hidden;
}
тут ничего не смущает?
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение картинки по форме при нажатии клавиши (любой) mihaillo Общие вопросы Delphi 3 04.03.2018 19:18
phpbb:subsilver2, изменение ширины блока смайлов(при ответе), или почему браузеры игнорят явно заданую ширину ячейки? Пепел Феникса HTML и CSS 1 25.06.2012 09:29
Плавное появление картинки при наведении мыши на ссылку CodeNOT JavaScript, Ajax 7 28.04.2011 17:15
Воспроизведение аудио файла при движение мышки marsius Общие вопросы Delphi 7 27.05.2010 18:53
Плавное движение картинки KoBRaAndrey Общие вопросы Delphi 2 09.04.2010 11:42