2012-04-27 70 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;