为了账号安全,请及时绑定邮箱和手机立即绑定

为什么js放在head里报错,加上window.onload也不行

为什么js放在head里报错,加上window.onload也不行

啊啊啊啊123 2016-09-29 15:13:47
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>向上无缝滚动</title> <style> body { font-size: 12px; line-height: 24px; text-algin: center;        /* 页面内容居中 */ } * { margin: 0px; padding: 0px;            /*  去掉所有标签的marign和padding的值  */ } ul { list-style: none;           /*  去掉ul标签默认的点样式  */ } a img { border: none;        /*  超链接下,图片的边框  */ } a { color: #333; text-decoration: none;     /* 超链接样式 */ } a:hover { color: #ff0000; } #mooc { width: 399px; border: 5px solid #ababab; -moz-border-radius: 15px;      /* Gecko browsers */ -webkit-border-radius: 15px;   /* Webkit browsers */ border-radius: 15px; box-shadow: 2px 2px 10px #ababab; margin: 50px auto 0; text-align: left;               /* 让新闻内容靠左 */ } /*  头部样式 */ #moocTitle { height: 62px; overflow: hidden;  /* 这个一定要加上,内容超出的部分要隐藏,免得撑高头部 */ font-size: 26px; line-height: 62px; padding-left: 30px; background-image: -moz-linear-gradient(top, #f05e6f, #c9394a); /* Firefox */ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f05e6f), color-stop(1, #c9394a)); /* Saf4+, Chrome */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8fa1ff', endColorstr='#f05e6f', GradientType='0'); /* IE*/ border: 1px solid ##f05e6f; -moz-border-radius: 8px 8px 0 0;      /* Gecko browsers */ -webkit-border-radius: 8px 8px 0 0;   /* Webkit browsers */ border-radius: 8px 8px 0 0; color: #fff; position: relative; } #moocTitle a { position: absolute; right: 10px; bottom: 10px; display: inline; color: #fff; font-size: 12px; line-height: 24px; } /*  底部样式 */ #moocBot { width: 399px; height: 10px; overflow: hidden;     /* 这个一定要加上,内容超出的部分要隐藏,免得撑高底部结构 */ } /*  中间样式 */ #moocBox { height: 144px; width: 335px; margin-left: 25px; margin-top: 10px; overflow: hidden;    /*  这个一定要加,超出的内容部分要隐藏,免得撑高中间部分 */ } #mooc ul li { height: 24px; } #mooc ul li a { width: 180px; float: left; display: block; overflow: hidden; text-indent: 15px; height: 24px; } #mooc ul li span { float: right; color: #999; } </style> </head> <body> <!--  慕课网课程公告开始 --> <div  id="mooc">  <!--  头部 --> <h3 id="moocTitle">最新课程<a href="#" target="_self">更多>></a> </h3> <!--  头部结束 -->  <!--  中间 --> <div  id="moocBox">     <ul id="con1">         <li><a href="#">1.学会html5 绝对的屌丝逆袭(案例)</a><span>2013-09-18</span></li>         <li><a href="#">2.tab页面切换效果(案例)</a><span>2013-10-09</span></li>         <li><a href="#">3.圆角水晶按钮制作(案例)</a><span>2013-10-21</span></li>         <li><a href="#">4.HTML+CSS基础课程(系列)</a><span>2013-11-01</span></li>         <li><a href="#">5.分页页码制作(案例)</a><span>2013-11-06</span></li>         <li><a href="#">6.导航条菜单的制作(案例)</a><span>2013-11-08</span></li>         <li><a href="#">7.信息列表制作(案例)</a><span>2013-11-15</span></li>         <li><a href="#">8.下拉菜单制作(案例)</a><span>2013-11-22</span></li>         <li><a href="#">9.如何实现“新手引导”效果</a><span>2013-12-06</span></li>     </ul>     <ul id="con2">     </ul> </div> <!--  中间结束 -->  </div> <!--  慕课网课程公告结束 -->  <script type="text/javascript">  var area = document.getElementById('moocBox');  var con1 = document.getElementById('con1');  var con2 = document.getElementById('con2');  var speed = 50;  area.scrollTop = 0;  con2.innerHTML = con1.innerHTML;  area.scrollTop = con1.scrollHeight;  function scrollUp(){  if(area.scrollTop == 0) {//向上 起始是216到0再变成216  area.scrollTop = con1.scrollHeight;  }else{    area.scrollTop --;   }  } function scrollUp1(){//向上 起始是0到216再变成0  if(area.scrollTop >= con1.scrollHeight) {  area.scrollTop = 0;  }else{    area.scrollTop ++;   }  } var myScroll = setInterval("scrollUp()",speed); area.onmouseover = function(){  clearInterval(myScroll); } area.onmouseout = function(){  myScroll = setInterval("scrollUp()",speed); }  </script> </body> </html>上面是正常的代码,是放在body里的,想放到head里怎么破真的不搞不清window.onload 有的时候可以又不行
查看完整描述

7 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

问题并不出在页面加载顺序上,加上window.onload还是不能执行的原因是因为window.onload=function(){}写了后,相当于将所有JS放到一个window.onload这个局部作用域中;

而你的代码setInterval("scrollUp()",speed),这么写叫做字符串写法,其中scrollUp这个函数必须在全局作用域中才可以被读取;所以当你加了window.onload以后,scrollUp就相当于放在局部作用域中,所以无法读取;

2种解决办法:

1、如你现在一样,放到</body>之前;

2、改成setInterval(scrollUp,speed)这么写,这样既可以读取全局作用域中函数,也可以读取局部作用域中函数;当改成这么写后,你再去加上window.onload就没问题了

查看完整回答
4 反对 回复 2016-09-30
  • 啊啊啊啊123
    啊啊啊啊123
    非常感谢,按你的第二种方法终于成了,不过又有新问题了,把第二种方法写好的代码放入.js文件引入html又不能动了,为什么呢.....
?
stone310

TA贡献361条经验 获得超191个赞

html:

<script src="xxx.js"></script> //引用;
//引用后,本页面不能有window.onload,否则会覆盖

xxx.js:

window.onload=function(){
//XXXX具体代码
//最后scrollUp不要用字符串写法
}
查看完整回答
反对 回复 2016-09-30
?
NO_3667788

TA贡献2条经验 获得超1个赞

朋友,你就不能把代码放到专门的.js文件里面吗,然后在head里面写上<script type="text=javascript" src="存放的路径,绝对/相对路径都可以"><script>

在js文件里写上  window.onload=function(){

        你完美的js代码块;

}

-----------------搞定收工。

查看完整回答
反对 回复 2016-09-29
点击展开后面1
?
用户193893

TA贡献5条经验 获得超1个赞

你的onload函数放在哪了,你的onload里面又包含了什么
查看完整回答
反对 回复 2016-09-29
?
CodeSection

TA贡献6条经验 获得超7个赞

主要是先加载和后加载的区别。

放在head中的JS代码会在页面加载完成之前就读取,而放在body中的JS代码,会在整个页面加载完成之后读取

如果JavaScript脚本写在head标签里面,那么需要用window.onload起到一个延迟加载的作用。

如果JavaScript脚本写在body里面,也要看具体位置。如果写在body里面,一般都是写在了body标签的最后面。

查看完整回答
反对 回复 2016-09-29
  • 7 回答
  • 1 关注
  • 3426 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信