Обобщая мою функцию

Я написал эту функцию, которая изменяет размер элемента на выбранный угол

function RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)
{   
    //var I = StartSize ;
    var SSpx = "" , LeftPx="" , TopPx="";

    LeftPx = (Left)+Unit; 
    TopPx = (Top)+Unit;


    if(StartSize < EndSize)
    {       
            StartSize+=2;

            SSpx = StartSize+Unit;

            if(Left!=0) LeftPx = (Left-StartSize)+Unit;
            if(Top!=0)  TopPx = (Top-StartSize)+Unit;

            $(Elements).css({'width': SSpx,'height': SSpx});
            $(Elements).css({'left' : LeftPx , 'top' : TopPx});

            setTimeout(function(){RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)},1);
    }

}

теперь это изменение размера только маленьких элементов к большим, я хочу обобщить это изменение размера от большого к маленькому, так:

если мой StartSize больше, чем EndSize ---> БОЛЬШОЙ МАЛЕНЬКИЙ еще ---> МАЛЫЙ БОЛЬШОЙ

простой, если еще можно было бы зациклить это изменение от МАЛЕНЬКОГО к БОЛЬШОМУ МАЛОМУ К БОЛЬШОМУ [...]

Есть ли способ без введения других параметров в функцию?




Я изменил решение, предложенное Маркусом, и оно работает, но я все еще не удовлетворен...

function RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)
{   
    var SSpx = "" , LeftPx = "" , TopPx = "", Direction = StartSize < EndSize , Condition ;

    LeftPx = (Left) + Unit;
    TopPx = (Top) + Unit;

    if (Direction) 
    {   StartSize+=2;
        Condition = StartSize < EndSize ;
    }
    else
    {   StartSize-=2;
        Condition = StartSize > EndSize ;
    }

    SSpx = (StartSize) + Unit;
    LeftDiff = Direction ? Left - StartSize : Left + StartSize;
    TopDiff = Direction ? Top - StartSize : Top + StartSize;

    if(Left!=0) LeftPx = (LeftDiff) + Unit;
    if(Top!=0)  TopPx = (TopDiff) + Unit;

    $(Elements).css({'width': SSpx,'height': SSpx, 'left' : LeftPx , 'top' : TopPx});

    if(Condition)
        setTimeout(function(){RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)},1);
}

2 ответа

Решение

Это то, что вы хотите?

function RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)
{   
    var SSpx = "" , LeftPx = "" , TopPx = "", Direction = StartSize < EndSize;

    LeftPx = (Left) + Unit;
    TopPx = (Top) + Unit;

    if (Direction) Startsize += 2 else Startsize -= 2;

    SSpx = (StartSize) + Unit;
    LeftDiff = Direction ? Left - StartSiz : Left + StartSiz;
    TopDiff = Direction ? Top - StartSiz : Top + StartSiz;

    if(Left!=0) LeftPx = (LeftDiff) + Unit;
    if(Top!=0)  TopPx = (TopDiff) + Unit;

    $(Elements).css({'width': SSpx,'height': SSpx, 'left' : LeftPx , 'top' : TopPx});

        setTimeout(function(){RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)},50);

}

Вместо того, чтобы передавать как startSize, так и endSize, вы можете попробовать передать только разницу между значениями, будь то положительная (в одном случае) и отрицательная (в другом случае). Затем удалите существующий блок if else и измените код так, чтобы он работал с "разницей", а не с startSize и endSize.

Другие вопросы по тегам