Сайты - по стандартам, но не стандартные сайты!
Добрый день, продолжаю старую тему программирования onscroll.
Для наглядности приведу всю страницу:
title название
параграф
название
параграф
... ... ... ... ... ... ... ... ...название
параграф
название
параграф
У html, body и #wrapper высота автоматическая, а длина 100%.
Множество блоков .aspect хитрым образом выстроены посередине экрана, причём имеют абсолютную ширену.
Над блоками .aspect-- #header, под ними-- #footer.
А теперь главное:
Блоки #leftlights и #rightlights хитрым образом расположены между левой границей блоков .aspect и левой границей экрана, между правой границей .aspect'ов и правой границей экрана соответственно.
Допустим, что они на абсолютной высоте 320px от верхней границы экрана.
Поскольку на всей странице лишь один скролл- на всю высоту body- хочется заставить блоки #leftlights и #rightlights принимать такое значение style.top, чтобы они "приезжали", например, на середину экрана, который видит юзверь.
То есть пользователь прокручивает бегунок, а блоки, как всевидящее око, плавно подползают до уровня глаз пользователя.
Моя фантазия истощилась, когда я перепробовал два, на мой взгляд, единственных нормальных путя:
1) с помощью body onscroll='function(){var i = document.getelementById ('leftlights').style.top;};' после чего оперировать с i в циклах и т.д.
2) с помощью document.captureEvents(Event.SCROLL); но это я похоже вообще придумал сам, или же не понимаю, как применять данный метод.
Короче говоря, разъясните, пожалуйста... Готовых примеров не полно, но они есть, например на самом тяжеловесном сайте мира http://heroescomunity.com/ там меню "плывёт" вниз к счастливому глазу пользователя, который зачем-то опустил скроллинг.
PS может быть есть проще путь, как это реализовать, чем onScroll ?
Нет на форуме
Wizard
Вот такой скрипт вставьте, должно работать:
function getScrSize() { var scrT = 0; if(window.scrollY) { scrT = window.scrollY ? window.scrollY : window.pageYOffset; } else if(document.documentElement && document.documentElement.scrollTop) { scrT = document.documentElement.scrollTop; } else if(document.body && document.body.scrollTop) { scrT = document.body.scrollTop; } return scrT; } function setBlock(elem1, elem2) { var scrollSize = getScrSize(); elem1.style.top = elem2.style.top = Math.round(320 + scrollSize) + "px"; } onload = function() { var elem1 = document.getElementById("leftlights"), elem2 = document.getElementById("rightlights"); setBlock(elem1, elem2); this.onresize = this.onscroll = function() { setBlock(elem1, elem2); } }
Нет на форуме
Вроде понял суть скрипта, но он почему-то не работает. onload = function() действительно запускает function setBlock (...), но изменения не видны. как были блоки неподвижны, так и остались. У Вас мой пример работал с Вашим скриптом? Или хоть один пример...
Нет на форуме
Да, работает в IE6, Opera7+, Gecko/20040206+.
Нет на форуме
Да, всё испробовал... Значит что-то не так со скриптом, хотя с виду всё прилично...
Нет на форуме
Елки-палки, только сейчас дошло - Вам ведь нужно, чтобы они опускались сверху вниз!
А я думал, что нужно их заставлять при скроллинге оставаться на одном и том же месте...
Нет на форуме
Это было бы странно, так как они итак оставались на одном месте:)
Нет на форуме
Да Вы там в начале ссылку "мертвую" дали, я и не пойму. Кстати, у меня только в FF скроллинг не появлялся, а в IE, Opera страница скроллится и блоки "уезжают" без скрипта.
Значит нужно, чтобы плавно двигались? Это посложнее будет...
Нет на форуме
Нет... Нужно чтобы блоки всегда были в поле зрения, плавность необязательна. сам придумаю, если будет без неё всё работать. У Вас на страничке много контента, поэтому вы его прокручиваете... Но из любого участка этого контенда должна быть видна, допустим, меню (как это раньше было на http://heroescommunity.com/ , сейчас кажется убрали свою турбо-меню, которая весила чуть больше 100килобайт%) ), а мне надо, чтобы тело документа прокручивалось, как неопределённо-высокая колонка посередине страницы, но при этом чтобы два блока по бокам, которые сначало находятся на расстоянии 320пикселей от верха всего документа при передвижении бегунка менялись.
При прокрутке вниз style.top увеличивается, пока не достигнет середины ВИДИМОЙ области на экране. А если его повести наверх, то он должен наоборот, уменьшать style.top опять-таки до попадания двух боковых блоков в середину экрана. Я не против, например, использовать координаты курсора или одного из видимых в данный момент центральных блоков, чтобы циклично приравнять расстояние от верха документа до блока .aspect к left/rightlights.style.top...
Вопрос: как это сделать? Можно ли воплотить в жизнь одно из моих предложений (с помощью курсора или центральных блоков) ?
Нет на форуме
Wizard написал:
Нет... Нужно чтобы блоки всегда были в поле зрения, плавность необязательна.
Так я и сделал, что они всегда в середине...
Нет на форуме
Я имел ввиду даже после прокрутки скроллбара... А у Вас они прикованы, стоят как вкопаные и всё. Попробуйте увидеть мои два блока после того, как скролл будет целиком внизу... Вот что требуется
Нет на форуме
Wizard
Что значит - "стоят, как вкопанные"? Они всегда в середине, если страницу проскроллить до низу, то они все равно остануться посередине...
Нет на форуме
Вы не могли бы сделать скриншот ? А то может всё есть но я что-то не понял или Вы, или я скрипт не понял как подключить надо по-особому... По Вашей последней реплике могу сказать, что так и надо... Но у меня не так:(
Нет на форуме
Wizard
Я Вам сейчас архивчик со страничкой вышлю на e-mail...
Нет на форуме
Большое спасибо за Ваше время.
Нет на форуме
AKS
Отправил Вам ответное письмо с картинками. Может, так нагляднее и удобнее.
Дело в том что изначально контента не 4 блока .aspect а гораздо больше.
Это-то и есть проблема. Если всё равно не понятна затея, то могу выслать меню, которая раньше была на том сайте выше. Там это реализовано, правда, не лучшим образом.
Нет на форуме
Ах вот оно что... Работает везде, кроме IE. Забудьте про письмо:) Так в чём тут дело?
Нет на форуме
Так что проблема с IE6... В Фоксе и Опере всё как я просил, спасибо.
Нет на форуме
Проблема не в IE6, проблема вот здесь:
html, body, #wrapper { overflow: auto; }
Нет на форуме
Но если это убрать то в IE скроллера вообще не будет...
Нет на форуме
А почему не будет? Всегда же появляется полоса прокрутки, если контента больше...
Нет на форуме
Она почему-то есть, а бегунка на ней нету. Как будто контента мало...
Нет на форуме
То есть - что-то со страницей, но не со скриптом...
Нет на форуме
Всё дело было в
Странно... Чего невалидного? Или неправильного, так сказать... Я не понимаю
Нет на форуме