Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找水平移动元素的每个X,Y位置_Javascript_Arrays_Object_Position - Fatal编程技术网

Javascript 查找水平移动元素的每个X,Y位置

Javascript 查找水平移动元素的每个X,Y位置,javascript,arrays,object,position,Javascript,Arrays,Object,Position,我在这方面遇到了不少麻烦。以下是我目前掌握的情况: var findPos = function(obj){ var curLeft = 0; var curTop = 0; var arr = []; curLeft += obj.offsetLeft; curTop += obj.offsetTop; arr[arr.length] = {x: curLeft, y: curTop}; return arr; } 这只返回传递到函

我在这方面遇到了不少麻烦。以下是我目前掌握的情况:

var findPos = function(obj){
    var curLeft = 0;
    var curTop = 0;
    var arr = [];

    curLeft += obj.offsetLeft;
    curTop += obj.offsetTop;
    arr[arr.length] = {x: curLeft, y: curTop}; 
    return arr;
}
这只返回传递到函数中的元素的起始位置。但是当对象移动时,我希望它存储返回的数组中的每个位置(x,y)。关于如何做到这一点,有什么建议吗?我尝试过递归,但没有真正奏效


如果相关,元素将使用CSS
@关键帧移动

@mbeckish的想法是正确的,因为数组是全局的,所以您不必返回它-它将由函数更新。此外,似乎没有必要使用
curLeft
/
curTop
变量“累积”x,y位置。偏移量应足够大。你需要这样的东西:

var arr = [];

var findPos = function(obj){
    arr[arr.length] = {x:obj.offsetLeft, y:obj.offsetTop}; 
}
var intRef = window.setInterval(function(){ findPos(obj) }, 100);
要随时间跟踪动画,可以使用setInterval()或setTimeout()函数,如下所示:

var arr = [];

var findPos = function(obj){
    arr[arr.length] = {x:obj.offsetLeft, y:obj.offsetTop}; 
}
var intRef = window.setInterval(function(){ findPos(obj) }, 100);
以上内容将每100毫秒触发一次,并填充阵列。然而,这将无限期地持续下去,直到你停止它,所以你需要某种触发或结束时间。要关闭坐标跟踪,请使用:

window.clearInterval(intRef);

@mbeckish的想法是正确的,因为数组是全局的,所以您不必返回它——它将由函数更新。此外,似乎没有必要使用
curLeft
/
curTop
变量“累积”x,y位置。偏移量应足够大。你需要这样的东西:

var arr = [];

var findPos = function(obj){
    arr[arr.length] = {x:obj.offsetLeft, y:obj.offsetTop}; 
}
var intRef = window.setInterval(function(){ findPos(obj) }, 100);
要随时间跟踪动画,可以使用setInterval()或setTimeout()函数,如下所示:

var arr = [];

var findPos = function(obj){
    arr[arr.length] = {x:obj.offsetLeft, y:obj.offsetTop}; 
}
var intRef = window.setInterval(function(){ findPos(obj) }, 100);
以上内容将每100毫秒触发一次,并填充阵列。然而,这将无限期地持续下去,直到你停止它,所以你需要某种触发或结束时间。要关闭坐标跟踪,请使用:

window.clearInterval(intRef);

如果在findPos中将arr声明为局部变量,那么每次调用findPos时它都将重置为空数组。在此函数之外声明arr。如果在findPos中将arr声明为局部变量,则每次调用findPos时,它都将重置为空数组。在此函数之外声明arr。谢谢。我意识到我的一些代码是多余的,但我仍然在努力获取对象移动时的每个位置。有什么建议吗?:)@Nilzone--您可能最好使用
setInterval()
函数每隔一段时间调用
findPos()
函数。但是,如果你走这条路线,你也可以手动设置元素的动画,跟踪x、y位置,然后更新它们。我会试试的-谢谢!但这让我有点烦,因为我不能让它工作recursion@Nilzone--我不确定递归(一个调用自身的函数)在什么地方对这样的事情是必要的。这种技术通常用于解决分而治之的问题……很公平——无论如何,setInterval真的很有帮助——谢谢!)非常感谢。我意识到我的一些代码是多余的,但我仍然在努力获取对象移动时的每个位置。有什么建议吗?:)@Nilzone--您可能最好使用
setInterval()
函数每隔一段时间调用
findPos()
函数。但是,如果你走这条路线,你也可以手动设置元素的动画,跟踪x、y位置,然后更新它们。我会试试的-谢谢!但这让我有点烦,因为我不能让它工作recursion@Nilzone--我不确定递归(一个调用自身的函数)在什么地方对这样的事情是必要的。这种技术通常用于解决分而治之的问题……很公平——无论如何,setInterval真的很有帮助——谢谢!)