有几个BUG,请帮我看看,蟹蟹。http://www.imooc.com/video/2219

来源:4-3 [DOM事件] QQ面板状态切换效果

飞天意大利面神兽

2016-06-29 11:30

function getclsname(clsname,parent){
	var oParent=parent?document.getElementById(parent):document,
		eles=[],
		elements=oParent.getElementsByTagName("*");
	for (var i=0,l=elements.length;i<l;i++) {
		if(elements[i].className==clsname){
			eles.push(elements[i]);
		}
	}
	return eles;
}

window.onload=drag;

function drag(){
	var otitle=getclsname("login_logo_webqq","loginPanel")[0],
	    oclose=document.getElementById("ui_boxyClose"),
	    odiv=document.getElementById("loginPanel"),
	    online=document.getElementById("loginState"),
	    loginStatePanel=document.getElementById("loginStatePanel"),
	    lis=loginStatePanel.getElementsByTagName("li"),
	    loginStateShow=document.getElementById("loginStateShow","loginState")[0],
	    loginstatetxt=getclsname("login-state-txt");
	    
	otitle.onmousedown=fnDown;
	
	oclose.onmousedown=function(){
		odiv.style.display="none";
	}
	
	online.onclick=function(event){
		event=event||window.event;
		if(event.stopPropagation){event.stopPropagation();}else{event.cancelBubble=true;}
		loginStatePanel.style.display="block";
	}
	
	for(var i=0,l=lis.length;i<l;i++){
		lis[i].onmousemove=function(){
			this.style.backgroundColor="#567";
		}
		lis[i].onmouseout=function(){
			this.style.backgroundColor="white";
		}
		lis[i].onclick=function(event){
			event=event||window.event;
			if(event.stopPropagation){
				event.stopPropagation();
			}else{event.cancelBubble=true;}
			var id=this.id;//divs=this.getElementsByTagName("div"),
				
			loginStatePanel.style.display="none";
			loginstatetxt.innerHTML=this.childNodes[1].innerHTML;
			loginStateShow.className='';
        	loginStateShow.className='login-state-show '+id;
		}
	}
	document.onclick=function(){

		loginStatePanel.style.display="none";
	}
	
}
function fnDown(evnet){
	event=event||window.event;
	
	var odiv=document.getElementById("loginPanel");
	var disx=event.clientX-odiv.offsetLeft,
		disy=event.clientY-odiv.offsetTop;
		
	document.onmousemove=function(event){
		event=event||window.event;
		var x=event.clientX-disx,
			y=event.clientY-disy,
			outx=document.clientWidth-odiv.offsetWidth-5,
		 	outy=document.clientHeight-odiv.offsetHeight-5;
		if(x<5){x=5;}
		else if(x>outx){x=outx;}
		if(y<5){y=5;}
		else if(y>outy){y=outy;}
		odiv.style.left=x+'px';
		odiv.style.top=y+'px';
	}
	
	document.onmouseup=function(){
		document.onmousemove=null;
		document.onmouseup=null;
	}
}

注:HTML和CSS均用的是老师提供的,未修改。

一共四个BUG,三个有图,第四个是点击状态LI,状态栏内容不变。

57734097000171df05000387.jpg

577340980001693905000387.jpg

5773409900014ac105000387.jpg



写回答 关注

3回答

  • silent8090
    2016-06-29 17:39:14

    还有一种检查方式就是在浏览器预览时,打开开发者工具面板,会报错

    飞天意大利面...

    嗯,没有报错呢

    2016-06-30 09:21:57

    共 1 条回复 >

  • silent8090
    2016-06-29 17:21:12

    loginStateShow.className='login-state-show '+id;,你这句看看index.html中下划线是'_'还是'-';还有 loginstatetxt=getclsname("login-state-txt");这句,我也不是很懂,但是好像应该取id,而不是classname

    飞天意大利面...

    嗯嗯,感谢你的回答

    2016-06-29 17:25:50

    共 1 条回复 >

  • 飞天大虫
    2016-06-29 17:13:43

    outx=document.documentElement.clientWidth-odiv.offsetWidth-5,

    outy=document.documentElement.clientHeight-odiv.offsetHeight-5;


    74 75行换成上面试试,貌似少了个documentElement。

    飞天意大利面...

    嗯嗯,你的对了,解决了两个BUG,请问这是什么原因?

    2016-06-29 17:21:26

    共 1 条回复 >

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99532 学习 · 1300 问题

查看课程

相似问题