【问题标题】:Generalizing my Function概括我的功能
【发布时间】:2015-01-05 14:47:00
【问题描述】:

我编写了这个函数,通过选定的角调整元素的大小

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 ---> BIG to SMALL else ---> 从小到大

一个简单的 if else 可以循环它从 SMALL 到 BIG 到 SMALL 到 BIG [...]

有没有办法不给函数引入另一个参数?




我修改了马库斯提出的方案,效果不错,但还是不满意……

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);
}

【问题讨论】:

  • “但我还是不满意” - 什么..?这意味着您的问题没有明确的问题描述。顺便说一句,“概括我的功能”并不是一个真正的问题。

标签: javascript function resize generalization


【解决方案1】:

这是你想要的吗?

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);

}

【讨论】:

  • 它不太好用,有点绕圈子……顺便说一句,我不知道Direction = StartSize &lt; EndSize;这种表达方式你能告诉我它是怎么称呼的吗?跨度>
  • 我没有测试它,只是一个方法。 StartSize &lt; EndSize 只返回分配给方向的真或假,因此方向是真或假。不知道有没有名字...^^
【解决方案2】:

您可以尝试只传递值之间的差异,而不是同时传递 startSize 和 endSize,无论是正数(在一种情况下)还是负数(在另一种情况下)。然后删除现有的 if else 块,并更改代码以使用“差异”,而不是 startSize 和 endSize。

【讨论】:

  • 这可能是一个解决方案,但我希望不会推翻一切:/
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多