//声明一个全局变量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();