2012-06-10 6 views
3

Этот вопрос может показаться глупым, но он разбивает мне голову. Я хотел бы сделать своего рода вертикальное представление прокрутки, состоящее из разных слайдов; эффект должен быть «похож» на этот сайт:Как получить текущий видимый слайд в вертикальной области прокрутки с помощью jQuery

Я создал unorderd список, содержащий другой слайд:

<div id="main"> 
    <div id="content"> 
    <ul id="bg"> 
     <li id="slide1"> <!-- content --></li> 
     <li id="slide2"> <!-- content --></li> 
    <!-- and so on --> 
    </ul> 
    </div> 
</div> 

Я дал position:fixed по центру страницы для всех слайдов (пока есть изображения) и другого z-индекса для создания слайдов и изображений. Что-то вроде

----- slide 1 
    §§§ image 2 
----- slide 2 
    §§§ image 3 
---- slide 3 

и так далее

Это, конечно, работает только в смысле: слайд, при прокрутке, раскрывает следующий слайд, но предыдущие изображения всегда видны не все удаляются из потока из-за к их фиксированному позиционированию.

Так что я подумал, давая изображения position:absolute (и дать position:relative к <li>), но это не делает их «липкими» в центре страницы, пока новые слайды не прибывает и покрывают ее, они, конечно, естественно, следуйте за их родителями <li> в своем движении.

Я полностью потерял это, а также о том, как получить текущий видимый список в окне. Я просмотрел все встроенные функции, предоставляемые jQuery: scrollTop(), offset().top, position().top, я получил $(window).height(), высота 0 фиксируется, но все, что я получаю, являются «абсолютными» позициями элементов (я имею в виду, он не меняется со свитком), я не могу понять, как сказать, когда слайд находится на полпути по экрану, чтобы я мог что-то сделать (пока не знаю, что).

Уверен, что мне не хватает чего-то очевидного здесь. Я изучил код со связанного сайта, и хотя я могу понять почти все это, я до сих пор не могу понять, как он получает текущий слайд (кроме того, он работает по-другому, чем мой, поскольку он загружает анимированные gifs динамически и только для каждого слайда. В моем случае каждый слайд представляет собой контейнер с различными элементами, анимацию и т. д.).

Как получить, если, например, $('li#slide3') есть внутри? Как я могу решить проблему сложенными изображениями? Нужно ли устанавливать их как «фиксированные» динамически или пересчитывать при каждом прокрутке их позиции, чтобы сделать position:absolute? Для этой секунды мне все же нужно было бы получить позицию каждого элемента по сравнению с фиксированной точкой (я считаю, $(window).scrollTop(), которая до сих пор дает мне всегда 0 при прокрутке), но я не могу понять, как это сделать.

О, я использую метод jQuery scroll() для привязки прокрутки, так как у меня также есть список навигации, который позволяет вам перейти к желаемому слайду, и это объясняет это тоже.

Надеюсь, я ясно сказал об этом: изображения должны всегда оставаться в центре, а прокрутка слайдов должна покрывать их, и пока изображение покрывается, необходимо отображать и занять свое место, поэтому мне нужно чтобы понять, как получить позицию текущего элемента <li>, скажем, когда он находится на полпути через окно, и соответствующим образом установите предыдущее изображение.

+0

Я рекомендую изменить тэг 'offset' на тег' parallax'. – arttronics

ответ

5

Этот тип сайта использует Parallax Effects для перемещения фоновых изображений.

Рассмотрите возможность использования плагина jQuery Parallax, такого как jparallax, который может сделать многое намного проще.

Но для всей веб-страницы, возможно, вы захотите обратиться к jQuery Parallax Plugin, у которой есть демонстрационная страница, основанная на примере, который вы указали. Эта демонстрационная страница также является учебником!

Там также a lot of websites, которые могут дать вам дополнительные идеи и глядя внутри на веб-странице, вы можете выяснить, какой тип параллакса плагин они используют.

Edit: Отличный инструмент для использования встроен прямо в Firefox браузер, так что вы можете увидеть любой веб-страницы в слоистой структуры 3D. Это поможет справиться с тем, как этот веб-сайт взаимодействует со многоуровневым фоном. Подробнее о Firefox 3D ViewHERE.

Edit 2: Это может быть полезно: How to tell if a DOM element is visible in the current viewport?

Кроме того, на примере сайта вы предоставили, метод они используют для центра образ в окне просмотра, как только это прокручивается в поле зрения может быть в файле style.css. Конечно, у них есть JQuery изменения этих элементов, но стиль действительно имеет смысл:

#main ul.bg li img.gif { position: absolute; z-index: 1; width: 996px; height: 800px; left: 50%; right: 50%; top: 50%; bottom: 50%; margin: -400px -498px; } 




Edit 3: Вот JQuery Parallax Plugin, что делает то же самое как ваш связанный пример, и имеет очень мощный API. Этот конкретный плагин имеет расположение на каждый слой с пользовательскими смещениями.

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

Этот плагин имеет имя Stellar.js, а страница gitHub - HERE. Если вы посетите там home page, он прокручивает по горизонтали ... обратите внимание на слово EASY в звездах, который является эффектом параллакса, который выстраивается в линию до края окна браузера. Когда вы прокрутите, другие звезд будет автоматически прокручиваться, если в общая площадь показать другие ключевые слова.

+0

Я знаю плагин parallax и использовал его в некоторых проектах, и этот сайт не использует его, хотя эффект, который он достигает, можно рассматривать как параллаксный стиль.Довольно уверен в этом, я вижу, что он каждый раз рассчитывает расстояние от фотографий; Я просто не знаю, как он получает текущий слайд. Во всяком случае, сайт, с которым вы связаны, хорош (я alreadt видел nikeworld один), это может стоить попробовать althoug не то, что мне нужно –

+0

Бог я видел, что он знает сайт в списке, который вы тоже связали ... a +1 заслуживает, он не отвечает на мой вопрос, но это может быть приятная альтернатива. –

+0

Насколько я могу видеть, приведенная ссылка примера - это просто используемый механизм параллакса ... много математических функций математики очевидны при вычислении происходит много движения слоя. – arttronics

-1

Я смотрю на эволюцию HTML, контейнер div # имеет большую высоту (количество li * li height), li имеет отображение: none/block, overflow: hidden и height между 0 и высотой окна.