css - 为什么JavaScript里首次获取元素的style.topzhi值为NaN?
本文介绍了css - 为什么JavaScript里首次获取元素的style.topzhi值为NaN?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
想练习一个鼠标拖拽移动网页元素的函数,想让他top一旦小于0则马上设置top为0(知道应该用窗口宽高来比较,但是这只是测试),发现第一次获取top值竟然是NaN,而后面几次则正确输出top值。
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>drag</title>
<style>
#box{
position: absolute;
width: 200px;
height: 200px;
top: 300px;
left: 300px;
background-color: #AFAFAF;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
window.onload=move;
function move() {
var box=document.getElementById("box");
box.onmousedown=msDown;
}
function msDown() {
event=event || window.event;
var box=document.getElementById("box"),
disX=event.clientX-box.offsetLeft,
disY=event.clientY-box.offsetTop;
document.onmousemove=function(event){
sMove(event, disX, disY);
}
document.onmouseup=function(){
document.onmouseup=null;
document.onmousemove=null;
}
}
function sMove(event, X, Y){
var box=document.getElementById("box"),
oldTop=parseInt(box.style.top),
oldLeft=parseInt(box.style.left),
newLeft=event.clientX-X,
newTop=event.clientY-Y;
console.log(oldTop);
if (oldTop>0){//把这个if--else判断去掉,就会发现第一次log为NaN,后面正常;
box.style.top=newTop+"px";
box.style.left=newLeft+"px";
}
else{
box.style.top="0px";
box.style.left="0px";
}
}
</script>
</body>
</html>
解决方案
box.style.top
获取到的是行内样式的top数值,默认为''
,parseInt('') = NAN
如果想要获得浏览器计算后的top值,可以用window.getComputedStyle(box)['top']
这篇关于css - 为什么JavaScript里首次获取元素的style.topzhi值为NaN?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文