Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2009, 01:57
Интересующийся
Отправить личное сообщение для glutton Посмотреть профиль Найти все сообщения от glutton
 
Регистрация: 26.03.2009
Сообщений: 25

Последовательное выполнение кода
Здравствуйте, вот какая проблема, очень прошу помочь:

Есть задача - плавно увеличить изображение при клике, при достижении конечного размера (не раньше!!) должна появиться кнопка "Закрыть".
Вот как реализовано:

function ShowImg(obj,hBlock) { 
    if (obj.offsetHeight < hBlock) { 
        obj.style.height = (obj.offsetHeight + 50) + 'px';
        setTimeout (function(){ShowImg(obj,hBlock)},30); 
    }
}
 
function showLargePicture(h)
{
    var div = document.getElementById('img_container');
    var img = document.getElementById('resImage');
 
    // Плавное увеличение изображения
    var i = ShowImg(img,div,h);
    // Появление кнопки "Закрыть"
    var x = document.getElementById('img_close');
    x.style.display = 'block';
}


Вобщем, кнопка "Закрыть" появляется сразу - параллельно с увеличением, не дожидаясь окончания процедуры..
Можно как-то заставить её "подождать" с появлением до того, как полностью закончится выполнение функции ShowImg(obj,hBlock) ??
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2009, 14:08
Интересующийся
Отправить личное сообщение для dionis Посмотреть профиль Найти все сообщения от dionis
 
Регистрация: 06.11.2009
Сообщений: 13

Не проверял но должно сработать

function ShowImg(obj,hBlock) { 
    if (obj.offsetHeight < hBlock) { 
        obj.style.height = (obj.offsetHeight + 50) + 'px';
        setTimeout (function(){ShowImg(obj,hBlock)},30); 
    }
    else{
        // Появление кнопки "Закрыть"
        var x = document.getElementById('img_close');
        x.style.display = 'block';
    }
}
 
function showLargePicture(h)
{
    var div = document.getElementById('img_container');
    var img = document.getElementById('resImage');
 
    // Плавное увеличение изображения
    var i = ShowImg(img,div,h);
}
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2009, 12:04
Интересующийся
Отправить личное сообщение для glutton Посмотреть профиль Найти все сообщения от glutton
 
Регистрация: 26.03.2009
Сообщений: 25

Спасибо! как просто все.. Работает как надо.
А вот еще проблема всплыла. Код тот же, слегка модифицированный, чтоб нагляднее было:

function ShowImg(img, height) { 
    if (img.offsetHeight < height) { 
       // постепенное увеличение высоты
        img.style.height = (img.offsetHeight + 50) + 'px';
        setTimeout (function(){ShowImg(img, height)},30); 
    }
    else{
        // Появление кнопки "Закрыть"
        var x = document.getElementById('img_close');
        x.style.display = 'block';
    }
}
 
function showLargePicture(url, height)
{
    var img = document.getElementById('Image');
    img.src = url;
    img.style.display = 'block';
 
    // Плавное увеличение изображения
    var i = ShowImg(img,height);
}


Проблема в следующем - при клике не успевает замениться картинка - увеличиваться начинает сначала предыдущий рисунок (как будто застревает в памяти) - img.src = url; - и уже в процессе увеличение (ближе к концу) заменяется скачком на новый. Учитывая, что рисунки разного размера - ужасно некрасиво получается такой скачок.

(* закрытие картинки делаю по клику img.style.display = 'none' )

Есть ли какой-нибудь выход?? Надо, чтоб при закрытии типа память ичищалась от старой картинки..
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2009, 17:16
Интересующийся
Отправить личное сообщение для dionis Посмотреть профиль Найти все сообщения от dionis
 
Регистрация: 06.11.2009
Сообщений: 13

Вобщем попробуй при закрытии полностью удалять обьект, а когда нужно отображать создавай новый, вот пример который перед открытием удаляет обьект со старой картинкой. Пример не тестил ну и стили не забудь при создании настроить чтоб как у предыдущего были.
function showLargePicture(url, height) {
  var img = document.getElementById('Image');              
  var tempImg = document.createElement('img'); //создаём новую картинку
  img.parentNode.insertBefore(tempImg, img); //вставляем новую перед старой
  tempImg.parentNode.removeChild(img); //удаляем полностью тег со старой картинкой
  tempImg.id = 'Image';
  tempImg.src = url;
  tempImg.style.display = 'block';

  // Плавное увеличение изображения
  var i = ShowImg(tempImg, height);
 }
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение кода на лету ViZ Общие вопросы Javascript 7 07.11.2009 15:16
Манера написания кода Max01 Серверные языки и технологии 5 07.11.2009 02:09
Убрать из кода вызовы FireBug Shasoft Общие вопросы Javascript 4 25.08.2009 16:46
Готовность HTML кода no_alex Общие вопросы Javascript 15 25.11.2008 16:52
Последовательное выполнение кода avtor01 AJAX и COMET 6 29.10.2008 19:06