трабл с плавным сворачиванием/разворачиванием [javascript]

Linkpusher
На сайте с 28.12.2007
Offline
176
730

в яваскрипте есть такой вот кусок (get(obj) эквивалентен document.getElementById(id)):

function curtainOpenpic(obj, T, D)

{

var curtainT = T/2;

var curtainD = D/2;

if (curtainT > (0-curtainStep))

{

curtainD += curtainStep;

curtainT -= curtainStep;

var rect = 'rect('+ curtainT +'px, auto, '+ curtainD +'px, auto)';

get(obj).style.clip = rect;

setTimeout(function(){curtainOpenpic(obj,curtainT*2, curtainD*2)},curtainTimeout);

}

}

function curtainClosepic(obj, num)

{

var curtainD = get(obj).offsetHeight- (curtainStep*num);

var curtainT = curtainStep*num;

var num = parseInt(num)+1;

if (curtainD>0)

{

curtainD -= curtainStep;

curtainT += curtainStep;

var rect = 'rect('+curtainT+'px, auto, '+ curtainD +'px, auto)';

get(obj).style.clip = rect;

setTimeout(function(){curtainClosepic(obj, num)},curtainTimeout);

}

else

{

get(obj).style.display = 'none';

}

}

одна из этих функций плавно разворачивает слой, другая сворачивает...

в слое ничего примечательного, обычный такой слой style="display: none; position: absolute; clip: rect(auto, auto, auto, auto); z-index: 105; left:50%; top:0;". по онклику с тумбнейла другой скрипт переопределяет его размеры, позицию, грузит туда основную пиксу и включает видимость, потом в дело вступает разворачивание.

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

помогите плз отловить баг, и/или настроить проверку успел ли слой "закрыться".

Точу ножи. Буквально. Есть отзывы. Заказать заточку в МСК и Подольске можно через Телеграмм.
seomarlboro
На сайте с 20.11.2007
Offline
108
#1

попробуй таймаут поставить, который ограничивал бы минимальный промежуток времени между кликами

Don't just listen to experts. Become one. Web, UI/UX, iOS applications design (https://dribbble.com/KirKovalski)
Linkpusher
На сайте с 28.12.2007
Offline
176
#2

это саму проблему конечно решит, но появится другая-кликнул юзер по тумбе... и ниче не произошло... кликнул еще раз-произошло :) вместо одного глюка получится другой.

в общем фигня в том, что curtainClosepic продолжает выполняться пока не выполниться, т.е. пока не "закроет" слой. думаю, будет достаточно придумать как прервать рекурсию, если в ходе выполнения юзер кликнул на тумбе...

чего бы такого на онклике прописать...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий