- //声明一个全局变量
- var index=0,//当前显示图片的索引,默认值设置为0
-     timer=null,//定时器
-     main=byId("main"),
-     prev=byId("prev"),//上一张按钮
-     next=byId("next"),//下一张按钮接着给他们绑定事件
-     pics=byId("banner").getElementsByTagName("div"),//箭头效果换图的主要设置 返回的数组
-     dots=byId("dots").getElementsByTagName("span");
-     banner=byId("banner"),
-     menuContent=byId("menu-content"),
-     //可以看作元素的集合也可以看作为数组
-     menuItems=menuContent.getElementsByClassName("menu-item"),
-     subMenu=byId("sub-menu"),
-     innerBox=subMenu.getElementsByClassName("inner-box"),
-     size=pics.length;
-     //console.log(size);
- //封装getElementById()
- //==用于一般比较  ===用于严格比较
- //==在比较的时候可以转换数据类型 ===严格比较,只要类型不匹配就会返回false
- // function byId(id){
- //     return typeof(id)==="string"?document.getElementById(id):id;
- // }
- //DOM0级事件:只能给一个元素得某一个行为绑定一次方法,第二次绑定得话会把前面得覆盖掉;
- //DOM2级事件:可以给某一个元素得同一个行为绑定多个 不同得方法
- //DOM1级事件他是1998年10月1号称为W3的推荐标准里面没有定义事件相关得内容  只是讲了模型并没有讲事件
- //监听方法:可以去随时监听到每异步操作来执行
- // addEventListener() and  removeEventListener() --除了ie9以下
- // addEventListener()可以为元素添加多个事件处理程序,触发时候按照添加的而顺序一次进行调用
- // removeEventListener()是移除事件处理程序(不能移除匿名添加的函数)
- // addEventListener() and  removeEventListener()
- //第一个参数:事件名字
- //第二个参数:事件处理程序函数
- //第三个参数:布尔值;true表示在捕获阶段调用  flase表示在冒泡阶段调用
- //                   从上向下执行           从第低向上执行  直接包含的父元素
- //IE浏览器 -- IE6-8版本
- //attachEvent()   and detachEvent()
- //attachEvent()代表可以添加多个事件处理程序,也是可以触发的时候按照添加的而顺序一次处理程序
- //detachEvent()代表的的移除事件处理程序(不能溢出匿名添加的函数)
- //attachEvent()   and detachEvent()
- //第一个参数:一个事件名字
- //第二个参数:事件处理程序函数
- //IE浏览器没有第三个浏览器  就这个两个
- // next.onclick=function(){
- //     alert("匿名函数");
- // }
- // next.onclick=function(){
- //     alert("这是0级事件覆盖上面的事件");
- // }
- //点击下一张按钮显示下一张图片 编写DOM二级事件
- // next.addEventListener("click",function(){
- //     alert("在DOM2级事件中这张是第一张显示的")
- // });
- // next.addEventListener("click",function(){
- //     alert("在DOM2级事件中上一张显示出来了之后这样也会一次执行")
- // });
- function byId(id){
-     return typeof(id)==="string"?document.getElementById(id):id;
- }
- //封装通用事件的绑定方法
- //传送三个参数
- //第一个是绑定事件的DOM元素
- // 第二个是事件名字
- // 第三个是事件处理程序
- function addHandler(element,type,handler){
-     //非IE浏览器
-     if(element.addEventListener){
-         element.addEventListener(type,handler,true);
-         //IE浏览器支持的DOM2级事件
-     } else if (element.attachEvent) {
-         element.attachEvent("on"+type,handler);
-         //IE浏览器不支持DOM2级事件时
-     } else {
-         element["on"+type]=null;
-     }
- }
- //封装测试
- // addHandler(next,"click",function(){alert("11")});
- // addHandler(next,"click",function(){alert("22")});
- //点击下一张按钮显示下一张图片
- // addHandler(next,"click",function(){
- //     //点击下一个按钮,使得索引递增  上面设置的index=0
- //     index++
- //     // alert(index)调试弹出窗口
- //     if (index>=size) {index=0}
- //         // console.log(index);
- //     for(var i=0;i<size;i++){
- //         pics[i].style.display="none";
- //         //数组里面的全部先设置为不显示在下面到了哪里就显示哪个
- //         dots[i].className="";
- //         //先设置全部圆点不亮等到下面颠倒哪里圆点就亮哪个
- //         //这里设置空的话就找不到任何名字就不会显示
- //     }
- //     pics[index].style.display="block";
- //     //小圆点换图设置
- //     dots[index].className="active";//动态的给她添加高亮样式
- // });
- //清除定时器,停止自动轮播
- function stopAutoplay(){
-     if (timer) {
-         clearInterval(timer);
-     }
- }
- //鼠标滑过主菜单
- for (var m=0,idx,mlen=menuItems.length;m<mlen;m++){
-     //给所有的主菜单定义属性,表明它索引
-     menuItems[m].setAttribute("data-index",m);
-     addHandler(menuItems[m],"mouseover",function(){
-         //显示主菜单所在的背景
-         subMenu.className="sub-menu";//隐形的将hide属性移除
-         //获取当前主菜单的索引
-         idx=this.getAttribute("data-index");
-         //alert(idx);
-         //便利所有的子菜单innerBox,将他们先隐藏起来
-         for(var j=0,jlen=innerBox.length;j<jlen;j++){
-             //隐藏所有的子菜单
-             innerBox[j].style.display="none";
-             menuItems[j].style.background="none";
-         }
-         //找到当前的字菜单,让他显示出来
-         innerBox[idx].style.display="block";
-         menuItems[idx].style.background="rgba(0,0,0,0.1)";
-     });
- }
- //鼠标离开banner区域。隐藏子菜单
- addHandler(banner,"mouseout",function(){
-     subMenu.className="sub-menu hide";
- });
- //鼠标离开主菜单。隐藏子菜单
- addHandler(menuContent,"mouseout",function(){
-     subMenu.className="sub-menu hide";
- });
- //鼠标划入子菜单。显示子菜单
- addHandler(subMenu,"mouseover",function(){
-     subMenu.className="sub-menu";
- });
- //鼠标离开子菜单时。隐藏子菜单
- addHandler(subMenu,"mouseout",function(){
-     subMenu.className="sub-menu hide";
- });
- //鼠标划入main大盒子  停止轮播
- addHandler(main,"mouseover",stopAutoplay);
- //鼠标划出main大盒子  开启轮播
- addHandler(main,"mouseout",startAutoplay);
- //定时器设置自动轮播  第一个参数索引值递增第二个参数就是时间
- //开启自动轮播
- function startAutoplay(){
-     timer=setInterval(function(){
-         index++;
-         //console.log(index)
-         if (index>=size) {index=0}
-             changeImg();
-     },2000)
- }
- function changeImg(){
-     //便利所有的图片,将图片隐藏起来,将点上的类消除
-     for(var i=0;i<size;i++){
-         pics[i].style.display="none";
-         //数组里面的全部先设置为不显示在下面到了哪里就显示哪个
-         dots[i].className="";
-         //先设置全部圆点不亮等到下面颠倒哪里圆点就亮哪个
-         //这里设置空的话就找不到任何名字就不会显示
-     }
-     pics[index].style.display="block";
-     //小圆点换图设置
-     dots[index].className="active";//动态的给她添加高亮样式
- }
- //把上面的代码封装
- //点击下一张按钮显示下一张图片
- addHandler(next,"click",function(){
-     //单击下一个按钮,是的索引递增
-     index++;
-     if (index>=size) {index=0};
-         changeImg();
-     });
- //点击上一个按钮显示上一张图片
- addHandler(prev,"click",function(){
-     //单击上一张按钮,是的索引递减
-     index--;
-     if (index<0) {index=size-1};
-     changeImg();
- });
- //点击圆点索引切换图片
- for(var d=0;d<size;d++){
-     //dots[d].id=d;默认给每一个span标签添加名为id的属性 赋值为d  不过这种方式不太好
-     //dots[d].id=d;
-     //如何添加自定义属性
-     dots[d].setAttribute("data-id",d);
-     //setAttribute设置属性
-     addHandler(dots[d],"click",function(){
-         //htis表示当前每一个对象的使用
-         index=this.getAttribute("data-id");//因为作用域的问题只能获取最后一个值这里只能得到3
-         changeImg();
-     });//setAttribute设置getAttribute接收
- }
- //定时器设置
- //图片每间隔几秒就会自动切换一次图片
- //当鼠标滑倒轮播图上的时候,消除每间隔几秒切换的效果,清楚定时器
- //自动开启轮播
- startAutoplay();