Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема движения предмета за скроллером 
:(
    Опции темы
thefree
Дата 15.11.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2007

Репутация: нет
Всего: нет



Есть div, кторый движется за скроллером с отступом от верха на 30px.
Но вот незадача он движется рывками, а хочется что бы он плавно передвигался за скроллером. Вот кусочек кода, помогите пожалуйста. Если можно с примером.
Код

<head>
<script type="text/javascript">

var topset = 30;

function makeMove() {
    var scrollTop;
    if (window.pageYOffset){
        scrollTop = window.pageYOffset;
    } else if(document.documentElement && document.documentElement.scrollTop){
        scrollTop = document.documentElement.scrollTop;
    } else if(document.body){ 
        scrollTop = document.body.scrollTop; 
    }
    if (scrollTop) {
        document.getElementById("frm").style.top = scrollTop + 30 + "px";
    }
    setTimeout("makeMove()", 25);
}

makeMove();
</script>
</head>

<body>
<div id="frm" style="top:30px; position:absolute; background-color:black">Test</div>
</body>

PM   Вверх
ksnk
Дата 15.11.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



в строке 
    if (scrollTop) {
смысловая ошибка. Ветка не сработает и в случае, если   scrollTop==0, что, согласитесь, иногда тоже бывает smile

обычно, такие причуды делаются с помощъю style="position:fixed", правда, не без грязных ругательств с сторону богатства фантазии авторов броузеров...

за подробностями можно обратится, к примеру сюда 

Это сообщение отредактировал(а) ksnk - 15.11.2007, 15:39


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
thefree
Дата 15.11.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2007

Репутация: нет
Всего: нет



он у меня зафиксированный, надо избавится от рывков при движении.

В тот момент ему и не надо срабатывать, когда 0

Это сообщение отредактировал(а) thefree - 15.11.2007, 16:43
PM   Вверх
thefree
Дата 15.11.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2007

Репутация: нет
Всего: нет



вопрос решил.
Код

function makeMove() {
    var scrollTop, yfix;
    var fixy = 0;
    var frm[3] = 30;
    if (window.pageYOffset) {
        scrollTop = window.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        scrollTop = document.documentElement.scrollTop;
    } else if (document.body) {
        scrollTop = document.body.scrollTop; 
    }
    if (scrollTop != fixy && scrollTop > frm[3]) {
        yfix = .2 * (scrollTop - fixy + frm[3]);
    } else if (frm[3] + fixy > frm[3]) {
        yfix = .2 * (scrollTop + frm[3] - fixy);
    } else {
        yfix = 0;
    }
    if (yfix > 0) yfix = Math.ceil(yfix); else yfix = Math.floor(yfix);
    if (fixy > 0) { document.getElementById("frm").style.top = fixy + "px";    }
    fixy = fixy + yfix;
    setTimeout("makeMove()", delay*4);
}


PM   Вверх
ksnk
Дата 15.11.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(thefree @  15.11.2007,  21:12 Найти цитируемый пост)
вопрос решил.

точно? Код содержит синтаксические ошибки...

Не ясно что за мистическое число delay,
Смысл конструкции  var frm[3] = 30; ускользает от моего понимания,
fixy используется излишне хитрым образом ... smile



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
thefree
Дата 15.11.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2007

Репутация: нет
Всего: нет



Цитата(ksnk @ 15.11.2007,  23:25)
Цитата(thefree @  15.11.2007,  21:12 Найти цитируемый пост)
вопрос решил.

точно? Код содержит синтаксические ошибки...

Не ясно что за мистическое число delay,
Смысл конструкции  var frm[3] = 30; ускользает от моего понимания,
fixy используется излишне хитрым образом ... smile

так получилось что это кусок большого кода, плавающей меню.
delay = 10 по дефолту.
PM   Вверх
ksnk
Дата 16.11.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(thefree @  15.11.2007,  23:37 Найти цитируемый пост)
так получилось что это кусок большого кода, плавающей меню.

Хотите сказать, что это реально работающий код? В таком случае, смысл переменной fixy отсутствует напрочь, так как она при ходе в процедуру сразу обнуляется.
Смысл "var frm[3] = 30;" не понимаю не только я, но и FireFox вместе с эксплорером.
   


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
thefree
Дата 16.11.2007, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2007

Репутация: нет
Всего: нет



http://hz-portal.vassabi.ru/thefree/frmenu.js
Увидел на http://cs.rin.ru решил сделать у себя.
Идеи по оптимизации и более гибкой кроссплатформенности браузеров приветствуются.
Вызов:
Код

beginMenu("menu name, "<<"); // начало
addLink("test", "#", "_self"); //ссылка
addTitle("test"); //разделитель, титул.
addText("smile"); // вывод текста.
endMenu(); //the end ):


Это сообщение отредактировал(а) thefree - 16.11.2007, 03:24
PM   Вверх
ksnk
Дата 16.11.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Вообще-то генерировать что-то с помощью document.write не модно уже несколько лет, с тех пор как устаканились с DOM'ом.

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

 fix = setTimeout("null", 1000);
В этом чувствуется какая-то юниксовая сумашедшинка smile 

А так - да, действительно работает smile


Это сообщение отредактировал(а) ksnk - 16.11.2007, 09:43


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.