我正在尝试使用原始HTML / javascript制作一个小网页。以下是我的HTML文件的当前内容:
<!DOCTYPE html>
<html>
<head>
<title>My website</title>
<style>
* {
margin: 0px;
padding: 0px;
}
div.banner-light {
background-color:#9090d0;
position: absolute;
left:0px;
}
div.banner-dark {
background-color:#8080e0;
position: absolute;
left:0px;
}
</style>
</head>
<body onload="javascript:onLoadBody()">
<script>
function onLoadBody() {
var curHeight = 0;
for (var i = 1; i < 25; i++) {
document.getElementById("stat" + i.toString()).style.top = curHeight.toString() + "px";
document.getElementById("stat" + i.toString()).style.width = (screen.availWidth * 0.15).toString() + "px";
document.getElementById("stat" + i.toString()).style.height = ((window.innerHeight - curHeight) / (25 - i)).toString() + "px";
curHeight += ((window.innerHeight - curHeight) / (25 - i));
}
}
function clickDiv(id) {
document.getElementById("stat" + id).innerHTML = "Clicked";
}
</script>
<div id='stat1' class="banner-light" onclick="javascript:clickDiv(1)"><center>1</center></div>
<div id='stat2' class="banner-dark" onclick="javascript:clickDiv(2)"><center>2</center></div>
<div id='stat3' class="banner-light" onclick="javascript:clickDiv(3)"><center>3</center></div>
<div id='stat4' class="banner-dark" onclick="javascript:clickDiv(4)"><center>4</center></div>
<div id='stat5' class="banner-light" onclick="javascript:clickDiv(5)"><center>5</center></div>
<div id='stat6' class="banner-dark" onclick="javascript:clickDiv(6)"><center>6</center></div>
<div id='stat7' class="banner-light" onclick="javascript:clickDiv(7)"><center>7</center></div>
<div id='stat8' class="banner-dark" onclick="javascript:clickDiv(8)"><center>8</center></div>
<div id='stat9' class="banner-light" onclick="javascript:clickDiv(9)"><center>9</center></div>
<div id='stat10' class="banner-dark" onclick="javascript:clickDiv(10)"><center>10</center></div>
<div id='stat11' class="banner-light" onclick="javascript:clickDiv(11)"><center>11</center></div>
<div id='stat12' class="banner-dark" onclick="javascript:clickDiv(12)"><center>12</center></div>
<div id='stat13' class="banner-light" onclick="javascript:clickDiv(13)"><center>13</center></div>
<div id='stat14' class="banner-dark" onclick="javascript:clickDiv(14)"><center>14</center></div>
<div id='stat15' class="banner-light" onclick="javascript:clickDiv(15)"><center>15</center></div>
<div id='stat16' class="banner-dark" onclick="javascript:clickDiv(16)"><center>16</center></div>
<div id='stat17' class="banner-light" onclick="javascript:clickDiv(17)"><center>17</center></div>
<div id='stat18' class="banner-dark" onclick="javascript:clickDiv(18)"><center>18</center></div>
<div id='stat19' class="banner-light" onclick="javascript:clickDiv(19)"><center>19</center></div>
<div id='stat20' class="banner-dark" onclick="javascript:clickDiv(20)"><center>20</center></div>
<div id='stat21' class="banner-light" onclick="javascript:clickDiv(21)"><center>21</center></div>
<div id='stat22' class="banner-dark" onclick="javascript:clickDiv(22)"><center>22</center></div>
<div id='stat23' class="banner-light" onclick="javascript:clickDiv(23)"><center>23</center></div>
<div id='stat24' class="banner-dark" onclick="javascript:clickDiv(24)"><center>24</center></div>
</body>
</html>
奇怪的是,当我尝试在浏览器中查看此文件时,它有时会按照我想要的方式加载 - 数字1到24位于页面左侧,背景交替。但是,大约5次中有4次,所有数字都会以一种表示错误的方式聚集在左上角(请亲自尝试)。
奇怪的是,您可以打开这个确切的文件10次而不进行任何编辑,它只能在几个实例中正常工作。我甚至不认为这是可能的,但它确实违背了我作为程序员所知道的一切。如果你知道任何可能导致这种情况的事情,请告诉我。顺便说一句,请原谅我可能做得不好的任何事情,因为我是一个相当新的人并自学这个。
编辑:在讨论了关于我的HTML,JS和CSS的顺序的一些建议解决方案后,我意识到上面的代码是如此复杂:不是使用onload,我只是设置div的样式宽度和高度百分比。不管怎样,谢谢大家!
答案 0 :(得分:0)
尝试在script
标记结束之前将body
代码(和内容)移至 所有div。这样,您可以确保在调用函数时创建DOM元素。似乎肯定会有一些事情发生在那里。您还应该考虑删除内联事件定义。
这是jsfiddle example with script defined at the bottom of the body
答案 1 :(得分:0)
你不应该像你那样去做事情。元素绝对将它们放在屏幕上,但它们实际上不占用空间。这就像把一个立方体扔在一杯水中。水位会上升。当立方体是“绝对的”时,它不会那样。所以你必须让div相对,然后它们会以你想要的方式叠加在一起。
* {
margin: 0px;
padding: 0px;
}
div {
height: 20px;
position: relative;
}
div.banner-light {
background-color: #9090d0;
left: 0px;
}
div.banner-dark {
background-color: #8080e0;
left: 0px;
}
window.onload = function () {
var curHeight = window.innerHeight;
console.log(curHeight);
for (var i = 1; i < 25; i++) {
document.getElementById("stat" + i.toString()).style.width = (screen.availWidth * 0.15).toString() + "px";
document.getElementById("stat" + i.toString()).style.height = (curHeight / (25 - 1)).toString() + "px";
}
}
function clickDiv(id) {
document.getElementById("stat" + id).innerHTML = "Clicked";
}
让你的div相对,只控制它们的宽度。
编辑 - 使高度适应屏幕高度:
为了使div的高度适应屏幕高度,你的数学有点不对劲。您应该读取窗口的高度,然后将其除以24。
我已经改编了上面的代码以及小提琴。
http://jsfiddle.net/djwave28/Ap4Sq/5/
请注意,调整窗口大小的人会遇到问题。字体大小也不适应。所以如果这个解决方案真的有用,取决于你。 这里也是一个解决大小调整问题的小提琴。
调整大小:http://jsfiddle.net/djwave28/Ap4Sq/6/
另请注意,通过为div提供类似的课程,您可以更聪明地学习。您可以添加更多类,而不仅仅是一个。即<div class="class1 class2 class3"></div>
甚至可以调整字体大小:http://jsfiddle.net/Ap4Sq/8/