Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Некорректно работает функция в JavaScript
 
 автор: Desh   (18.07.2009 в 13:26)   письмо автору
 
 

Здравствуйте,

Сложилась следующая проблемка, в поиске, увы, решения найти не смог.
Описываю:
1. Есть собственная функция, которая поднимает элемент на 45 пикселей вверх:

// Функция сворачивания тулбара сайта.
var i = 1;
function turn_toolbar()
{
 document.getElementById("toolbar").style.marginTop = '-'+i+'px';
 if(i == 45)
 {
  document.getElementById("turn").style.display = 'none';
  document.getElementById("restore").style.display = 'block';
  i = 1;
  return;
 }
 i++;
 setTimeout("turn_toolbar()", 20);
}

Она срабатывает при нажатии на определённую кнопку. Работает как надо.

2. Есть вторая собственная функция, опускающая элемент на 45 пикселей вниз:

// Функция восстановления тулбара сайта.
var n = 0;
function restore_toolbar()
{
 document.getElementById("toolbar").style.marginTop = n+'px';
 if(n == 45)
 {
  document.getElementById("restore").style.display = 'none';
  document.getElementById("turn").style.display = 'block';
  n = 1;
  return;
 }
 n++;
 setTimeout("restore_toolbar()", 20);
}

Вот с ней и начинается проблема. Работает как необходимо за исключением того, что элемент, который необходимо передвинуть перед срабатыванием функции элемент автоматически появляется на том месте, на котором был до работы первой функции. И уже после этого начинает движение "вниз" на 45 пикселей.
Пытался решить проблемы путём задания
document.getElementById("toolbar").style.marginTop = '-45px';

перед работы функции 2, но результат прежний.

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

С Уважением, Дмитрий.

  Ответить  
 
 автор: sim5   (18.07.2009 в 14:04)   письмо автору
 
   для: Desh   (18.07.2009 в 13:26)
 

Все корректно работает согласно тем условиям, которые вы сами задаете.

  Ответить  
 
 автор: Desh   (18.07.2009 в 15:46)   письмо автору
 
   для: sim5   (18.07.2009 в 14:04)
 

Тут появилась небольшая ясность: всё дело в значении стиля body {margin: 0px; } Если меняю его на -45px, к примеру, то и "выезд вниз" начинается как необходимо (однако в таком случае первоначально не видно самого блока).
Попытался сделать так, что после выполнения первой функции для margin-top для body становится -45px, но не срабатывает.

В итоге пока ещё ищу варианты корректировки)

  Ответить  
 
 автор: PAT   (18.07.2009 в 15:19)   письмо автору
 
   для: Desh   (18.07.2009 в 13:26)
 

Измените одну строчку на:
function turn_toolbar ()
{
document.getElementById ('toolbar').style.marginTop = (45 - i) + 'px';

Ну и, полагаю, что кнопка, клик по которой вызывает функцию turn_toolbar (),
изначально имеет у вас стиль display: none;

  Ответить  
 
 автор: Desh   (18.07.2009 в 15:49)   письмо автору
 
   для: PAT   (18.07.2009 в 15:19)
 

Заменил чуточку другое, во второй функции поставил:

 document.getElementById("toolbar").style.marginTop = (-45 + n) + 'px';

и всё стало работать как надо.

Спасибо за идею, она помогла добиться нужного результата)

sim5, тоже большое спасибо за участие)

  Ответить  
 
 автор: Desh   (20.07.2009 в 22:11)   письмо автору
 
   для: Desh   (18.07.2009 в 15:49)
 

Здравствуйте!)
Ещё одна проблема в этом же скрипте, только тут что-то совсем не понятное для меня.

Во всех браузерах всё работает очень хорошо, как необходимо, кроме IE 6 и IE 7. Проблема заключается в следующем: сразу после окончания выполнения функции (к примеру 1) все стилевые данные, которые функция изменяла обнуляются. Т.е., к примеру, согласно функции 1 (см. первое сообщение) элемент был поднят на 45 пикселей вверх, во всех браузерах он был поднят и всё, там и остался, но в 6 и 7 осле после поднятия элемента на 45 пикселей вверх он моментально становится обратно на первоначальное положение.

Собственно вопрос: как можно заставить "запоминать" изменения в IE 6,7? С 8 версией всё в порядке.

Заранее большое спасибо!)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования