使用javascript滑动div

问题描述 投票:1回答:3

我想编写一个JavaScript代码,将div沿特定方向,距离和给定时间滑动。我写了这个小脚本。但根本不起作用。相反,浏览器变慢了。看不到位置变化。有人可以告诉我如何取得结果吗?我知道有很多现成的库可以很容易地做到这一点。但是我只是想尝试一下。

<script type="text/javascript" language="javascript">
    var element = '';
    var slidePerMS = '';
    function slideIt(ele, direction, distance, slideDuration){
        element = ele;
        var i=0;
        slidePerMS = distance / (slideDuration*1000);
        for(i=0; i<3000; i++){
            setTimeout("changePosition()",1);
    }
}
function changePosition(){              
    var currElement = document.getElementById(element);
    currElement.style.left = "'"+slidePerMS+"px'";
}
</script>
javascript
3个回答
5
投票

该代码有很多问题,这甚至不好笑...让我们看看...

  1. 您正在尝试渲染1,000 FPS动画。对于浏览器来说,这根本是不可能的。
  2. 您正在将字符串作为参数传递给setTimeout,与eval一样邪恶。
  3. 您一次设置了slidePerMS,但之后再也没有更改,导致div一遍又一遍地移到完全相同的位置。
  4. 您正在设置样式,并在其中加上额外的引号-是否将引号放在CSS文件中?

仅此而已。请尝试以下方法:

<script type="text/javascript" language="javascript"> 
function slideIt(elem, direction, distance, slideDuration){ 
    var elmt = document.getElementById(elem),
        i=0, step = distance / (slideDuration*20),
        stepper = setInterval(function() {
            i = Math.min(distance,i+step);
            elmt.style.left = i+'px';
            if( i == distance) clearInterval(stepper);
        },50);
}
</script>

3
投票

您有很多问题。

您正在将setTimeout视为sleep。不要那样做它根本不像sleep,它在给定的时间段后运行一个函数,但不会暂停其他任何事情的执行。

这意味着您只需反复敲击该功能3000次,这就是锁定浏览器的原因。

应该使用for,而不是使用setInterval循环。

不要将字符串传递给setInterval(或setTimeout),它会被规避,这很慢且难以调试,并且会破坏作用域。而是传递一个函数。

changePosition内部,您正在尝试使用名为slidePerMS的变量,其为undefined,因为它是在slideIt的范围内定义的。

您还试图将left设置为"'123px'"。您不能在CSS中引用您的值。

摆脱两个'

这就是为什么您看不到任何变化的原因。 CSS中忽略了无效值。


© www.soinside.com 2019 - 2024. All rights reserved.