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

没看明白,有哪位大神讲讲

window.onload=function(){
    var aLi=document.getElementsByTagName('li');
    for(var i=0; i<aLi.length; i++){
        aLi[i].onmouseover=function(){
            //鼠标经过一级菜单,二级菜单动画下拉显示出来
     oSubNav = this.getElementsByTagName('ul')[0];
            if(oSubNav){
             var This = oSubNav;
             clearInterval(This.time);
             This.time = setInterval(function(){
                This.style.height = This.offsetHeight+16+"px";
                if(This.offsetHeight>=120)
                clearInterval(This.time);
             },30);
            }
    
        }
        //鼠标离开菜单,二级菜单动画收缩起来。        
        aLi[i].onmouseout=function(){
                oSubNav = this.getElementsByTagName('ul')[0];
            if(oSubNav){
             var This = oSubNav;
             clearInterval(This.time);
             This.time = setInterval(function(){
                This.style.height = This.offsetHeight-16+"px";
                if(This.offsetHeight<=0){
                    This.style.height='0px';
                    clearInterval(This.time);
                }
             },30);
            }  
        }
    }
}

正在回答

1 回答

1.首先用一个aLi变量承载<li>标签(getElementsByTagName('li')就是指li标签)。        

2.  for(var i=0; i<aLi.length; i++){};就是从第一个<li>标签开始遍历<li>标签

3.  aLi[i].onmouseover=function(){};查看你是否用鼠标覆盖其中的一级标签

4. oSubNav = this.getElementsByTagName('ul')[0];用变量 oSubNav承载你选中的<li>标签里的<ul>标签,因为每一个<li>标签里都只有一个<ul></ul>标签,所以[0]就代表<ul>里所有的二级标签。

5. if(oSubNav){} 如果oSubNav变量的值不为空,则继续执行。

6.var This = oSubNav; 一个变量代替另一个变量

7.clearInterval(This.time);执行代码函数之前,清除以前的执行

8.This.time = setInterval(function(){},30}每0.03秒执行一次function,

9.This.style.height = This.offsetHeight+16+"px";  从css里看到原先subNav的高度为0,所以不显示出来,而这里的代码就是为css代码里的subNav高度不断重新赋值(This.style.height),它的值就是每0.03秒+16px执行的,This.offsetHeight代表它在网页中此刻高度

10.if(This.offsetHeight>=120)
                clearInterval(This.time); 这个就是高度大于120,不再执行。

下面同理;


3 回复 有任何疑惑可以回复我~
#1

慕函数9642432 提问者

谢谢~~~
2016-07-31 回复 有任何疑惑可以回复我~
#2

kx00012kx

This.time = setInterval(function(){}在这一行代码中为什么要加“.time”? 为什么This = setInterval(function(){}这样写不行,这里time是一个什么属性?
2016-08-05 回复 有任何疑惑可以回复我~
#3

慕盖茨4878874 回复 kx00012kx

直接用This当然不行了,This代表oSubNav对象,它是对象,而赋值是需要属性承载的,time就是它的属性,如果你这样写也是可以的先声明var time="" ; time=setInterval(function(){},在后面的清除中就可以直接clearInterval(time).
2016-08-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
导航条菜单的制作
  • 参与学习       123899    人
  • 解答问题       813    个

水平、垂直、圆角导航条菜单,让您的技术探索之路更高效

进入课程

没看明白,有哪位大神讲讲

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信