我试图从彼此中减去2个整数,但我不断得到NaN
。
任何人都可以解释我的代码有什么问题
var moveit = null;
p = function (e){
if ((e.target.id == "windowContainer") || (e.target.id ==
"windowContainer2") || (e.target.id == "windowContainer3")){
console.log (e);
window.moveit = e.target;
window.onmousemove = p2;
var r = window.moveit.getBoundingClientRect();
var rl = r.left;
var rt = r.top;
window.onmouseup = function (e){
if (window.moveit == null) return;
window.moveit.onmousemove = window.moveit = null;
}
}
}
p2 = function (e, rt, epageY){
if (window.moveit == null) return;
var newY = rt - e.pageY;
console.log(isNaN(newY));
}
document.getElementById('windowContainer').onmousedown = p;
document.getElementById('windowContainer2').onmousedown = p;
document.getElementById('windowContainer3').onmousedown = p;
答案 0 :(得分:0)
onmousemove / down函数只将一个参数传递给它们的处理程序 - 一个Event
对象。在这种情况下,e
是p2
中唯一定义的参数。像这样自己调用函数来测试它是否正常工作:
p2({pageY: 100}, 50)
将记录false
。
答案 1 :(得分:0)
rt
不是值,这会导致您的问题。您需要将其传递到onmousemove
事件
var moveit = null;
p = function(e) {
if (
e.target.id == "windowContainer" ||
e.target.id == "windowContainer2" ||
e.target.id == "windowContainer3"
) {
console.log(e);
window.moveit = e.target;
var r = window.moveit.getBoundingClientRect();
var rl = r.left;
var rt = r.top;
window.addEventListener("mousemove", function(e) {
p2(e, rt);
});
window.onmouseup = function(e) {
if (window.moveit == null) return;
window.moveit.onmousemove = window.moveit = null;
};
}
};
p2 = function(e, rt, epageY) {
if (window.moveit == null) return;
var newY = rt - e.pageY;
console.log(newY);
};
document.getElementById("windowContainer").onmousedown = p;
document.getElementById('windowContainer2').onmousedown = p;
document.getElementById('windowContainer3').onmousedown = p;
这段代码可以正常运行。以下是我更改的内容列表:
我添加了addEventListener而不是.onmousemove,我认为这是更好的编码风格,但你可以按照自己的意愿行事(性能差异最小到没有)。
在mousemove事件中,我创建了一个匿名函数,以便您可以从上面计算的值传入rt。