Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Заморозка блока! (https://javascript.ru/forum/dom-window/44865-zamorozka-bloka.html)

xTODx 04.02.2014 22:41

Заморозка блока!
 
Всем привет, нужно сделать одну не очень сложную штуку, но я что то запутался.
Написал такой вот код
$(document).ready(function(){
	
	var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
	var setmenu = document.getElementById('text').offsetTop;
	$(document).scroll(function(){
		if(scrollTop > setmenu){
		//alert(1);
 $("#menu").toggleClass("menufix"); 
	} else if(scrolTop < setmenu){}
		
		}
	)

когда я докручиваю до элемента с id menu, он замирает, и фиксируется, но если я назад вернусь выше, он станет на своём месте.
Помогите, с js дружу пока не слишком круто)) но стараюсь учится. Как я понимаю, нужно записать значение положения в переменную при загрузке, и с ним всё время сравнивать.

kostyanet 05.02.2014 11:06

типа того http://stackoverflow.com/questions/8...-scrolls-to-it

kostyanet 05.02.2014 11:52

Вилка в пюре http://jsfiddle.net/XFaMV/1/

xTODx 05.02.2014 23:27

Не знаю на сколько умно так делать, но в общем заработало оно так)) по принципу первой ссылки сделал, но немножечко исправил.
Вот, держите, и правьте, где можно было сделать легче??
и вообще, как вместо
document.getElementById('getFixed').offsetTop;

написать в jquery?
$(document).('#getFixed').offsetTop;
не так уж точно))
В общем смотрите моё(частично) чудо
jQuery(function($) {
		var setmenu = document.getElementById('getFixed').offsetTop;
		fixDiv(setmenu);
		
    function fixDiv() {
      var $cache = $('#getFixed'); 
      if ($(window).scrollTop() > setmenu) 
        $cache.css({'position': 'fixed', 'top': '10px'}); 
      else
        $cache.css({'position': 'relative', 'top': 'auto'});
    }
    $(window).scroll(fixDiv);
    fixDiv();
});

xTODx 05.02.2014 23:27

спасибо вам большое)

kostyanet 06.02.2014 17:23

Цитата:

Сообщение от xTODx
написать в jquery?
$(document).('#getFixed').offsetTop;

Хоть раз посмотрите устройство жиклера чтобы понять _что_ быстрее в принципе.

Хоть запрототипируйся но когда вы передаете {'position': 'fixed', 'top': '10px'} скрипт должен профтыкать ключи объекта в имена атрибутов, а значения ключей в значения атрибутов.

И вот это

var $cache = $('#getFixed');

оно действительно?

Типа жиквери отложил в своей бд что был запрошен такой элемент #getFixed и искать его больше не надо, а надо просто взять по ключу getFixed и выдать ссылку взад.

Верится с трудом. Следовательно var $cache = $('#getFixed') - то есть поиск элемента в дереве - выполняется каждый раз когда сгорает событие scroll.

Насколько я понимаю это синтаксис $(window) полегче, поскольку передается явно готовая ссылка, но которую тоже еще надо отпарсить в том же махровом геттере.

Оценить ваше творение в целом лично не могу. Это не ява-скрипт.

xTODx 12.02.2014 00:20

хм, но работает... скажите что править, буду учиться


Часовой пояс GMT +3, время: 02:02.