猿问

多个onload他们执行的顺序是什么?

function tuPian(x){
	var href,imgs,txt;
	if(!document.getElementById('imgs')){return false}
	href=x.getAttribute('href');
	imgs=document.getElementById('imgs');
	imgs.setAttribute('src',href);
	if(document.getElementsByTagName('p')){
	txt=x.getAttribute('title');
	p=document.getElementsByTagName('p')[0];
	p.firstChild.nodeValue=txt;
	}
	return true;
}
function neiZhi(){
	if(!document.getElementById||!document.getElementsByTagName)return false;
	if(!document.getElementById('aJ'))return false;
	var aJ=document.getElementById('aJ');
	var aas=aJ.getElementsByTagName('a');
	for(var i=0;i<aas.length;i++){
		aas[i].onclick=function(){
			return !tuPian(this);
		}
	}
}
function addOnloadEvent(x){
	var oldOnLoad=window.onload;
	if(typeof oldOnLoad!='function'){
		window.onload=x;
	}else{
		window.onload=function(){
			oldOnLoad();
			x();
		}
	}
}
addOnloadEvent(neiZhi);



function afterNode(x,y){
	var w=y.parentNode;
	if(y==w.lastChild){
		w.appendChild(x);
	}else{
		w.insertBefore(x,y.nextSibling);
	}
}

function p(){
	var img=document.createElement('img');
	img.id='imgs';
	img.src='img/cool (3).jpg';
	var p=document.createElement('p');
	p.innerHTML='这是图片的描述';
	var aJ=document.getElementById('aJ');
	afterNode(p,aJ);
	afterNode(img,aJ);
}
addOnloadEvent(p);
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>js的艺术</title>
		<link rel="stylesheet" type="text/css" href="css/css.css"/>
		<script src="js/js.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<h1>Snapshots</h1>
		<ul id='aJ' >
			<li><a href="img/cool (1).png" title="摩登时代"><img src="img/cool (1).png" /></a></li>
			<li><a href="img/cool (2).gif" title="城市风光"><img src="img/cool (2).gif" /></a></li>
			<li><a href="img/cool (2).png" title="青色元素"><img src="img/cool (2).png" /></a></li>
			<li><a href="img/cool (4).jpg" title="唯美红绿"><img src="img/cool (4).jpg" /></a></li>
		</ul>
	</body>
</html>
html,body,ul{
	margin: 0;
	padding: 0;
	font-size: 18px;
}
h1{
	margin-left: 20px;
	transition: all 1s; 
}
ul{
	list-style: none;
}
li,img{
	display: inline-block;
	margin: 10px;
}

a{
	text-decoration: none;
	color: black;
	font-family: arial;
}
p{
	margin-left: 80px;
}
#imgs{
	width: 290px;
	height: 290px;
	border: 5px solid gainsboro;
	box-shadow: 5px 5px rgba(0, 0, 0, .6);
}
li>a>img{
	width: 50px;
	height: 50px;
}

上面是全部代码  里面有一个function addOnloadEvent(x){}函数 是用进行window.onload同时执行的; 

addOnloadEvent(neiZhi);这个调用是触发图片切换函数;

addOnloadEvent(p);这个是创建一个img 和p标签的;

显然window.onload的执行顺序不是从上到下, 他们的逻辑顺序什么?

清风流光
浏览 2139回答 1
1回答

我爱吃牛排

addOnloadEvent(neiZhi);  执行了 window.onload=neiZhi;addOnloadEvent(p); 执行了window.onload=function(){                oldOnLoad();                p();            }因为function addOnloadEvent(x){        var oldOnLoad=window.onload;  //把已有的事件函数赋给变量oldOnLoad        if(typeof oldOnLoad!='function'){ //判断是否已经有onload事件对应的函数            window.onload=x; //如果没有,则把函数直接调用,不用(),这里不适合要传递参数的函数。        }else{            window.onload=function(){ //如果已经有了onload事件对应的函数,则在后面追加要执行的新函数。此处的函数要有()                oldOnLoad();                x();            }        }    }
随时随地看视频慕课网APP
我要回答