Jump to content
  • 0

Два блока div разъезжаются при скроллинге окна браузера...


call007
 Share

Question

Всем привет.

Чтобы было сразу понятно, предлагаю посмотреть пример того, что получилось: http://mafia-world.ru/verstka/test/index.html

Как это работает:

Если медленно прокручивать скролл, то можно увидеть как два блока (один из которых находится под текстом RODINA, другой под ним) как бы выезжают из под него.

В определенный момент, а точнее когда нижний блок тёмного цвета полностью вылазит из текста RODINA (а это происходит, когда его css параметр "top" становится равным 285px) - эти блоки прекращают своё движение при скроллинге вниз.

Решил сделать этот эффект посредством события scroll. Однако, вероятно, это событие вызывается не на каждый прокрученный пиксель скролла. И если прокрутить резко вниз страницу, представленную выше, то не известно где окажутся разъехавшиеся блоки.

Как должно работать:

1) Сколлим страницу вниз, и два блока разъезжаются на то расстояние, на которое мы проскролили окно браузера. Плюс надо указать момент остановки движения блоков.

2) Скроллим страницу вверх, два блока должны принимать таким же образом исходную позицию.

Можно ли вообще осуществить задуманный эффект? И каким лучше всего способом?

Вот то, что пока сообразил:



$(document).ready(function() {
$(window).scrollTop(0); //при обновлении страницы поднимаем скролл страницы в самый верх
});

$(window).scroll(function() {
var topBlock3 = parseInt($('.block3').css('top')); // переменная, хранящая в себе значение "top" темного блока
if (topBlock3 >= 285) { //если у этого блока значение "top" превышает 285, то удаляем событие scroll
$(window).unbind();
}
var scrollHeight = $(window).scrollTop(); // переменная, хранящая в себе значение расстояния, прокрученного
// скроллом вниз и вверх (надо бы как-то сделать две переменные данного типа, чтобы в одной
// прописывалось расстояние прокрутки вверх, а у другой переменной - вниз)

$('.block3').animate({'top':'+='+scrollHeight},50); // прибавляем к значению "top" темного блока, при каждом вызове события scroll, значение сохранённое в переменной scrollHeight
$('.block2').animate({'top':'-='+scrollHeight},50); // отнимаем у значения "top" серого блока, при каждом вызове события scroll, значение сохранённое в переменной scrollHeight
});

Edited by call007
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

1. Я пральна понял, что вот это конечный результат?

http://www.screencast.com/users/psywalker/folders/Jing/media/7d02b02a-0f60-4554-a760-b793a10e2f82

2. Т.е. блоки должны плавно разъезжаться в разные стороны, до кокого то момента, на 285пк каждый, и в разные стороны, так?

3. Они должны быстро разъезжаться, так?

4. Если скролл будет уже далеко внизу, то видно их уже не будет, так как они останутся наверху да?

Link to comment
Share on other sites

  • 0

1. Я пральна понял, что вот это конечный результат?

http://www.screencast.com/users/psywalker/folders/Jing/media/7d02b02a-0f60-4554-a760-b793a10e2f82

Да, именно!

2. Т.е. блоки должны плавно разъезжаться в разные стороны, до кокого то момента, на 285пк каждый, и в разные стороны, так?

Тоже верно.

3. Они должны быстро разъезжаться, так?

Вообще, надо, чтобы плавно разъезжались, не очень быстро. И так, чтобы на экране было полностью видно момент предела на который блоки разъедутся.

4. Если скролл будет уже далеко внизу, то видно их уже не будет, так как они останутся наверху да?

Да, всё правильно.

А когда скролл поднимаем и на экране уже становятся видны эти подопытные блоки, то таким же образом их надо перемещать в исходную позицию.

Link to comment
Share on other sites

  • 0

А решения на чистом JS не пойдёт?

Да в общем то без разницы. Естественно, если будет во всех браузерах работать одинакого.

Но мне всегда казалось, что именно эту проблему (кроссбраузерность) с помощью jQuery довольно просто решить, да и код в размерах значительно меньше получается).

Link to comment
Share on other sites

  • 0

Да в общем то без разницы. Естественно, если будет во всех браузерах работать одинакого.

Но мне всегда казалось, что именно эту проблему (кроссбраузерность) с помощью jQuery довольно просто решить, да и код в размерах значительно меньше получается).

А ИЕ6 тоже нужно?

Link to comment
Share on other sites

  • 0

Вот всё что мне удалось добиться, но к сожалению в моём решение нет плавности, а наоборот присутствует противная резкость. Есть варианты, как исправить недочёты?

http://psywalker.ru/Forum/JS/Primitive/Dom-Zadachi/Scroll/5.html

Link to comment
Share on other sites

  • 0

Странно, у меня вообще не работает твой вариант. Использую Chromium 10.0

UPD: Попробовал в Firefox, все работает. Если тянуть за скролл то получается очень даже ничего, но вот если скроллом прокручивать, то плавность не помешала бы.

Edited by MC WEST
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy