все. Я пытаюсь создать вертикально фиксированное навигационное меню, которое плавает в динамически позиционируемом div. Я хочу, чтобы div прокручивался горизонтально, чтобы он не перекрывал контент на странице, а фиксировался вертикально, чтобы его всегда было видно. Я все еще не умею работать с jquery, и хотя я очень горжусь тем, чего мне удалось добиться с моими ограниченными знаниями, я столкнулся с проблемой с кодом, который пытаюсь реализовать.
Я создал 4 функции. Тот, который определяет положение навигационного элемента div (getVar), тот, который принимает текущую позицию элемента div и манипулирует CSS, чтобы позволить ему прокручиваться по горизонтали с содержимым страницы (scrollWith), тот, который вызывает вторую функцию, когда окно scrolled(scrollStart) и, наконец, функция, которая переопределяет позицию div при изменении размера окна.
Позиция div вычисляется правильно при загрузке. Он будет правильно пересчитан даже после изменения размера окна, но только если окно НЕ прокручивалось. После прокрутки окна кажется, что обновленная переменная позиции не передается функции, которая вычисляет позицию CSS.
Я попытался создать это, где было только две функции: одна для загрузки и одна для изменения размера окна. Эти две функции были практически идентичны, но работали не так, как я надеялся. Я также пытался создать функцию scrollStop, которая отвязывала бы событие прокрутки при изменении размера окна и вызывала функцию scrollStart после пересчета переменных, но оказалось, что переменные не обновлялись так, как я надеялся. Может быть гораздо более простой способ добиться эффекта, который мне нужен, и любой вклад очень ценится.
Я также создал скрипку для этого. http://jsfiddle.net/ED3gD/
Вот мой jquery
$(document).ready(function() {
getVar();
scrollStart();
});
$(window).resize((function() {
var timeout = null;
return function() {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(getVar, 250);
};
})());
function getVar() {
var p = $(".navigation");
position = p.offset();
}
function scrollWith() {
$win = $(window);
$('.navigation').css('left', position.left - $win.scrollLeft());
}
function scrollStart() {
$(window).scroll(scrollWith);
}
Вот мой HTML
<div class="wrapper">
<div class="navigation">
<div class="menu">
navigation
</div>
</div>
<div class="content">content</div>
wrapper
</div>
Вот мой CSS
.wrapper {
position:relative;
margin:0 auto;
background-color:red;
width:200px;
}
.navigation {
float: left;
position:fixed;
width:100px;
background-color:yellow;
}
.content {
position:absolute;
left:100px;
top:0px;
margin:0;
padding:0;
width:100px;
height:1400px;
background-color:blue;
}