2012-04-27 128 views
8

我在一个非常混乱的问题,今天无法通过JavaScript

我有一个帆布跑去,一个div来设置div.style.left和div.style.top CSS属性,这样

<canvas id="canvas" width="800" height="400"></canvas> 
<div id="xy"></div> 

然后我通过一个css文件设置div的属性,例如位置是:绝对和显示:无 然后,我写在经由JS div中X/Y位置,并尝试以设置div的属性,以便在div如下周围的鼠标,这样

var div = document.getElementById("xy"); 
var x = e.pageX - this.offsetLeft - 1; 
var y = e.pageY - this.offsetTop - y0 - 0.5; 
div.style.display = "block"; 
div.style.left = e.pageX + 25; 
div.style.top = e.pageY -10; 
div.style.backgroundColor = "#f00"; 

的现在有趣的是:我可以设置display和backgroundColor没有问题,但左侧和顶部的属性不起作用。如果我在我的HTML文件中删除了我的DOCTYPE声明,我可以毫无困难地修改左边和顶部的属性。没有文档类型的工作当然是不可能的。 我在做一些不应该做的事情或缺少一些完全明显的东西吗?

+0

该代码中的“e”是什么? *编辑*哦,这是一个事件处理程序。 – Pointy 2012-04-27 13:15:04

回答

11

你已经忘记了“PX”:

div.style.left = (e.pageX + 25) + 'px'; 
div.style.top = (e.pageY -10) + 'px'; 

您可能还需要添加div.style.position = "absolute";

如果您认为有任何机会,e.pageXe.pageY将字符串而不是数字,扔在一个parseInt

div.style.left = (parseInt(e.pageX, 10) + 25) + 'px'; 
div.style.top = (parseInt(e.pageY, 10) - 10) + 'px'; 
+0

+1,但是你的'parseInt'是不必要的,或者如果需要的话,在错误的地方有'''结尾。我相信'e.pageX'已经是一个数字了,但是如果有可能的话,你想'=(parseInt(e.pageX,10)+ 25)+'px';'(注意我也把你几乎总是想告诉'parseInt'具体使用什么基数。) – 2012-04-27 13:18:53

+0

是的,但是因为它是串联的字符串,所以它更安全。 我个人比较喜欢:)。 (好吧,基数,我现在会使用:)) – ke20 2012-04-27 13:21:37

+0

我的观点是,有什么是积极的错误,而不是它不理想。 **如果** e.pageX是一个字符串(比如''10“'),那么'parseInt(e.pageX + 25)'将会是'1025',而不是'35',因为当你添加一个数字转换为字符串,数字转换为文本并附加*:http://jsbin.com/ekiwup – 2012-04-27 13:24:11

0

另一种设置样式属性(如DIV对象)的方法是使用setProperty方法

您可以检查下面的Javascript代码示例

document.getElementById('div').style.setProperty("top","100px"); 
0

我也面临同样的问题,但是当我添加了一个空间到空DIV,它开始定位正确。即

div.innerHTML = &nbsp;&nbsp;