JavaScript прокрутка как ВКонтакте (fixed IE css)

JavaScript прокрутка как ВКонтакте (fixed IE css)

Реализация прокрутки окна на JavaScript как ВКонтакте. При прокрутке окна браузера прокручивается только элемент с контентом, а страница зафиксирована на месте.

Демо-пример
Скачать пример FixScroll

<!DOCTYPE html PUBLIC>
<html>
<head>
<title>Scroll for fixed background</title>

<script type="text/javascript" language="JavaScript" src="func.js"></script>

<style>

BODY{
 margin:0;
 padding:0;
 background: url(about:blank) no-repeat;
}

#main{ 
 overflow:hidden;
 border:1px solid blue; 
 position: absolute;
 top:0;
 left: 0;
 top:expression(document.getElementsByTagName('body')[0].scrollTop+'px');
 width: 200;
 height: 200px;
}

#content{
 border:1px solid green;
 width:100px; 
 height:100px; 
 overflow: auto; 
 margin: 48px; 
}

#wscroll{
 position:absolute;
 width:1px;
 top:0;
 left:0;
 border:1px solid red; /* Виден для демо-примера */
}

</style>
</head>
<body>
<!-- Невидимый элемент, фактически браузер прокручивает его. -->
<div id="wscroll"></div>

<div id="main">
 <div id="content">
 Text 1<br />Text 2<br />Text 3<br />
 Text 4<br />Text 5<br />Text 6<br />
 Text 7<br />Text 8<br />Text 9<br />
 Text 10<br />Text 11<br />Text 12<br />
 Text 13<br />Text 14<br />Text 15<br />
 Text 16<br />Text 17<br />Text 18<br />
 Text 19<br />Text 20<br />Text 21<br /> 
 </div>
</div>

<script type="text/javascript" language="JavaScript">
var el_id='content';

//Возвращает: координаты x/y, ширину, высоту элемента
var el_xy=abs_pos(el_id); 

//коорд. Y + высота элемента #content 
var el_yh=(el_xy['y']+el_xy['h']); 

//Высота #content с учетом прокрутки
var el_sh=get_scroll_height(el_id); 

//Ширина и высота окна (видимая область сайта)
var cw=get_client_width();
var ch=get_client_height(); 

/* Центрируем элемент #main */
var xy=abs_pos('main');
if(cw>xy['w']) set_style('main', 'marginLeft', ((cw-xy['w'])/2)); 
if(ch>xy['h']) set_style('main', 'marginTop', ((ch-xy['h'])/2)); 

/* 
Условия:
 1) Прокручиваемый элемент должен быть полностью виден в окне браузера.
 2) Наличие скрытого текста для прокрутки.
*/

if(ch>=el_yh && el_sh>el_xy['h']){
//Закрепляем фон страницы 
 set_style(get_doc_body(), 'backgroundAttachment', 'fixed'); 

//Высота окна + высота скрытой части текста
 var el_ys=ch+(el_sh-el_xy['h']); 
 
//Задаем длину линии #wscroll для ее прокрутки
 set_style('wscroll', 'height', el_ys); 
 
//Скрываем элементы прокрутки #content
 set_style(el_id, 'overflow', 'hidden'); 
 
//Фиксируем элемент #main
 set_style('main', 'position', 'fixed'); 
 
//Если неподдерживается fixed, то задаем обратно absolute (на всякий случай). 
 if(get_style('main', 'position')!='fixed') 
 set_style('main', 'position', 'absolute'); 
 
/*
Функция-обработчик события OnScroll окна браузера, 
ассоциируем с прокруткой элемента #content.
*/ 
 var func=function(){
//get_scroll_top(элемент) - возвращает значение прокрутки. 
//Для кроссбраузерности: (document.documentElement || document.body), (0 || 1)=1 
 set_scroll_top(el_id, (get_scroll_top(document.documentElement) || get_scroll_top(document.body)));
 } 
 
 if(typeof(document.onscroll)!=='undefined') document.onscroll=func;
 else window.onscroll=func;
 
}else set_style('main', 'top', 0); 
</script>

</body>
</html>


Специалист по видео

8 (929) 264 1523 (Константин)

cashara@bk.ru

Специалист по фото

8 (929) 261 3062 (Дмитрий)

Мультимедиа-студия «Два в кубе» © 2011 - 2015