Перемещение дива во время скролинга страницы

1. Валерий (19.10.2011 / 20:09)
Хочу сделать одну фишку. Такая фишка сейчас есть на яндексе.
Заходим на http://yandex.ru с компа. Вводим любую фразу в поиск.
Поле ввода находится как обычно, но начинаем скролить страницу и видим, что поле поиска фиксируется вверху страницы и всегда на виду.
Вот типа такой фишки мне надо, но вместо поля будет обычный див.
<div>содержание</div>
Вот хочу, чтоб при скролинге, этот див не уходил из видимости..

У кого есть идеи?

Добавлено через 01:33 сек.
Я бы наверное сам смог сделать, если бы знал какое действие в javascript отвечает за скролинг.. Ну типа за нажатие на элемент отвечает onclick, а за скролинг страницы?

2. ramzes (19.10.2011 / 20:13)
<div style="position: fixed; top:0;">text</div>

3. Валерий (19.10.2011 / 20:14)
это немного не то.. На яндексе изначально див находится не вверху страницы.. Вверх он встаёт и фиксируется только при скроллинге.. А если отскролить обратно, то он встаёт на прежнее место.

4. Валерий (19.10.2011 / 20:26)
Нашёл событие отвечающее за скроллинг. Это scroll krut
$(window).bind("scroll",function(){
alert(5);
});

Щас наверное напишу себе эту фишку.

5. Дмитрий (19.10.2011 / 20:31)
2. ramzes, нет, Рома, там аякс. Надо просчитать положение блока на странице с учетом количества пикселов скроллинга, и если они 0 или меньше - закреплять блок (приклеивать к верху), меняя значения css как ты написал выше, и параллельно пряча ненужные ссылки вокруг. Если же вернулись назад к верху (кол-во скроллинга 0), возвращать блоку position:relative и открывать скрытые ссылки.
Я вижу это так.

6. ramzes (19.10.2011 / 20:38)
5. dima.london, jquery там, ajax вообще для другого нужен))
я знаю что там. 3 строчки кода просто css куда легче для браузера
http://wap.smartoff.net/user/files/1/ 30 секунд, кто быстрее?))

7. Валерий (19.10.2011 / 20:41)
ramzeshttp://wap.smartoff.net/user/files/1/ 30 секунд, кто быстрее?))
Чё она у тебя ездит туда сюда? E

8. ramzes (19.10.2011 / 20:44)
7. valerik, она догоняет экран)) мне так больше нравится, можно без эффекта сделать

9. Дмитрий (19.10.2011 / 20:47)
8. ramzes, не понял прикола че-то cry

10. ramzes (19.10.2011 / 20:49)
9. dima.london, в смысле?
кстати, вот css яндекса
.b-head-floater_fixed_yes .b-head-search {
position: fixed;
top: 0;
}
без этого не работает у них))

Добавлено через 05:51 сек.
$(window).bind("scroll",function(){
if(pageYOffset != $("#full-header").css("top")){
// $("#full-header").animate({top: pageYOffset-1+"px"}, 100);
$("#full-header").css({top: pageYOffset-1+"px"});
}
}
full-header это ид фиксированного блока

11. Валерий (19.10.2011 / 21:53)
Всё сделал. Не могу не похвастаться, не сочтите за рекламу.

Код замудрил сложный.. jquery
    //Навигация при скроллинге   
    $('#head_tabs').css('top', '55');    
    var header_def_top = 55;
    var header_def_back =$('#tabs').css('background-image');  
    var header_def_col =$('#tabs').css('background-color');    
    
    $(window).bind("scroll",function(){      
        if(document.documentElement.scrollTop > header_def_top+70)
        {
        $('#head_tabs').css('position', 'fixed');
        $('#after_head').css('margin-top', '145px');
        $('#tabs').css('margin-top', '0px');
        $('#head_tabs').css('top','0px');
        $('#head_tabs').css('opacity','0.3');
        $('#tabs').css('background-image','none');
        $('#tabs').css('background-color','inherit');
        }
        else
        {
        $('#head_tabs').css('position', 'static');
        $('#after_head').css('margin-top', '0px');
        $('#tabs').css('margin-top', '70px');
        $('#head_tabs').css('top',header_def_top);
        $('#head_tabs').css('opacity','1');
        $('#tabs').css('background-image',header_def_back);
        $('#tabs').css('background-color',header_def_col);
        }
    });
    
    $('#head_tabs').hover(function(){$('#head_tabs').css('opacity','1');});
    $('#head_tabs').mouseleave(function(){if(document.documentElement.scrollTop > header_def_top+70){$('#head_tabs').css('opacity','0.3');}});
    //-------------------------


12. Дмитрий (19.10.2011 / 21:57)
11. valerik, зачем так много индийского кода obana

13. Валерий (19.10.2011 / 21:59)
да чёто разметка слетала после $('#head_tabs').css('position', 'fixed');
пришлось всё это городить.. позиции выставлять.. всякие соседнии элементы тоже..

Кроме того я сделал всякие фишки.. типа прозрачности..
и при наведении снова в полную видимость.

14. ramzes (19.10.2011 / 22:04)
13. valerik, а чем хвалишься то? не заметил там фиксированных блоков вообщеsmile

Добавлено через 02:30 сек.
$('#head_tabs').hover(function(){$('#head_tabs').css('opacity','1');});
$('#head_tabs').mouseleave(function(){if(document.documentElement.scrollTop > header_def_top+70){$('#head_tabs').css('opacity','0.3');}});
hover() имеет две части, начало и конец
$("id").hover(function(){
наведение
},
function(){
отведение
});

15. Валерий (19.10.2011 / 22:09)
ramzes (20 Октября 2011 / 00:04)
13. valerik, а чем хвалишься то? не заметил там фиксированных блоков вообщеsmile
Чёто с хрома не пашет sad
С других браузеров норм

$("id").hover(function(){
наведение
},
function(){
отведение
});
А вот за это спасибо, не знал

16. ramzes (19.10.2011 / 22:12)
15. valerik, у тебя там вообще много странного)) там реально 3-5 строк простейшего кода
я выше пример писал

Добавлено через 01:52 сек.
valerik (19 Октября 2011 / 21:59)
да чёто разметка слетала после $('#head_tabs').css('position', 'fixed');
fixed как и absolute позиционируется не влияя на другие элементы (для них, просто нет этих блоков

17. Валерий (19.10.2011 / 22:17)
ramzes (20 Октября 2011 / 00:12)
fixed как и absolute позиционируется не влияя на другие элементы (для них, просто нет этих блоков
В этом и проблема.. Изначально небыло никаких fixed и всё было ок, но после fixed, этот блок как бы убирается из разметки..
Вот пришлось выправлять. А в случае если javascript не включён, мне этот fixed не нужен, поэтому включаю я его скриптом.. короче это решение чисто для моей разметки. Уверен, что можно и проще.

18. ramzes (19.10.2011 / 22:21)
$('#head_tabs').css('position', 'fixed');
а разве не проще сделать вот так
$('#head_tabs').css({position:'fixed', top: '0px', opacity: '0.3'});

19. Валерий (19.10.2011 / 22:27)
Угу, поправил..

URL: https://visavi.net/topics/25781