在JavaScript中,变量的作用域是由其声明的位置决定的。在你的代码中,你在touchstart事件的处理函数内部声明了startX、startY、X和Y这四个变量:
div.addEventListener("touchstart", function (e) {
startX = e.targetTouches.pageX;
startY = e.targetTouches.pageY;
X = this.offsetLeft;
Y = this.offsetTop;
});
而在touchmove事件的处理函数中,你没有重新声明这些变量,只是直接使用了它们:
div.addEventListener("touchmove", function (e) {
var moveX = e.targetTouches.pageX - startX;
var moveY = e.targetTouches.pageY - startY;
this.style.left = X + moveX + "px";
this.style.top = Y + moveY + "px";
});
由于JavaScript采用了词法作用域,所以在touchmove事件的处理函数中能够访问到touchstart事件的处理函数内部声明的变量。但是在touchstart事件外部的代码中,无法访问到touchstart事件的处理函数内部声明的变量,因为它们的作用域仅限于touchstart事件的处理函数内部。
如果你想在touchstart事件外部访问这些变量的值,可以将它们声明在touchstart事件外部,然后在touchstart事件内部赋值给它们。这样你就可以在touchstart事件外部访问到它们的值了。
var startX = 0;
var startY = 0;
var X = 0;
var Y = 0;
div.addEventListener("touchstart", function (e) {
startX = e.targetTouches.pageX;
startY = e.targetTouches.pageY;
X = this.offsetLeft;
Y = this.offsetTop;
});
console.log(startX);
console.log(startY);
console.log(X);
console.log(Y);
div.addEventListener("touchmove", function (e) {
var moveX = e.targetTouches.pageX - startX;
var moveY = e.targetTouches.pageY - startY;
this.style.left = X + moveX + "px";
this.style.top = Y + moveY + "px";
});
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |