原生JS手风琴下拉(修改)
来源:互联网 发布:ndk r9d mac 编辑:程序博客网 时间:2024/06/07 12:24
上一篇写的原生JS手风琴。有朋友说在同一页面上不能同时new两个方法。不然就会被覆盖。确实是这样。因为写法的问题所以怎么new都是引用的是一个对象;其他的会被覆盖掉.所以针对这事件,做了修改
javascript:
var hao_nav =function() { this.NumDown=0;// 该值为点击获取的值 this.NumUp=null;// 该值为上次点击的值 this.NumSame=null;// //该值为点击时该容器高度等于传就来的值 this.timerDown=null;// 向下滑动定时器 this.timerUp=null;// 向上滑动定时器 this.timerSame=null;// 当点击时该容器高度等于传就来的高度时触发的定时器 this.containerH=0;//初始化容器高度 this.isFirst=true;//是否第一次点击 this.on=true;//开关 this.minH=null;//此为最小高度 this.maxH=null;//此为最大高度 this.classOn=null;//样式 this.json=null; this.speed=null;//速度 //self = this; var thatObj = this; this.init=function(obj){ var self = this; this.json = {}; for(var i in obj) { this.json[i] = obj[i]; } //console.log(self.json) this.minH = parseInt(self.json.minH); this.maxH = parseInt(self.json.maxH); this.classOn = this.json.classOn; this.speed = parseInt(self.json.speed);//console.log(typeof (this.speed))//console.log(this) this.oNav = document.getElementById(self.json.id); this.aSel = self.oNav.getElementsByTagName(self.json.btn);//console.log(self.json); for(var i=0; i<this.aSel.length; i++){ this.aSel[i].index = i; this.aSel[i].onclick = function(){ // alert(self.json.id); // return ; //console.log(self.json.id) self.NumDown = this.index;// console.log(this.NumDown) self.containerH = self.oNav.children[self.NumDown].offsetHeight; // conaolw.lof if(self.on==false){return false}//阻止定时器在运行中手贱的点击按钮二次触发 self.on=false; if(self.isFirst&&self.containerH==self.minH){ self.NumUp=0; self.isFirst=false; }if(self.containerH==self.maxH){ self.aSel[self.NumDown].className = ''; self.NumUp=null; self.isFirst=false; self.NumSame=self.NumDown;// console.log(self.NumSame) self.containerSame(); return ; }//console.log(1) self.containerUp(); self.containerDown(); } } }; this.containerDown=function(){ //向下滑动// console.log(this.NumDown) for(var z=0; z<thatObj.aSel.length; z++){ thatObj.aSel[z].className = ''; } thatObj.aSel[thatObj.NumDown].className = this.classOn; k=this.minH; this.timerDown = setInterval(function(){ k+=thatObj.speed; if(k>=thatObj.maxH){ k=thatObj.maxH; thatObj.NumUp=thatObj.NumDown; thatObj.on=true; clearInterval(thatObj.timerDown); } thatObj.oNav.children[thatObj.NumDown].style.height = k+'px'; },1); }; this.containerUp=function(){ //向上滑动// console.log(this.NumUp) if(this.NumUp!=null){ t=this.maxH; this.timerUp = setInterval(function(){ t-=thatObj.speed; if(t<=thatObj.minH){ t=thatObj.minH; thatObj.on=true; clearInterval(thatObj.timerUp); } thatObj.oNav.children[thatObj.NumUp].style.height = t+'px'; },1); } }; this.containerSame=function(){ //当高度相等时执行的向上滑动;// console.log(this.NumSame) l=this.maxH; console.log(l); this.timerSame = setInterval(function(){ l-=thatObj.speed; if(l<=thatObj.minH){ l=thatObj.minH; thatObj.on=true; clearInterval(thatObj.timerSame); } thatObj.oNav.children[thatObj.NumSame].style.height = l+'px'; },1); }};
html:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{margin: 0; padding: 0;} .nav{width: 900px; height: 300px; margin: 0 auto; background: #000000; overflow: hidden;} .nav div{width: 900px; height: 240px; overflow: hidden;} .nav .a{background: #ff0000;height: 240px;} .nav .b{background: #0061ba;height: 30px;} .nav .c{background: #dbc295; height: 30px;} .nav a{width: 900px; height: 30px; display: block; text-align: center; color: #FFFFFF; line-height: 30px; } .nav .on{background: #29799c;} .nav .act{background: #ccc;} #Nav2{margin-top: 100px;} </style> </head> <body> <div class="nav" id="Nav"> <div class="a"><a class="on" href="javascript:;">点击按钮</a></div> <div class="b"><a href="javascript:;">点击按钮</a></div> <div class="c"><a href="javascript:;">点击按钮</a></div> </div> <div class="nav" id="Nav2"> <div class="a"><a class="on" href="javascript:;">点击按钮</a></div> <div class="b"><a href="javascript:;">点击按钮</a></div> <div class="c"><a href="javascript:;">点击按钮</a></div> </div> <script src="js/json.js"></script><script></script><script> new hao_nav().init({ id:'Nav', //容器的ID btn:'a', //点击的按钮 minH:30, //子容器缩小的最小值 maxH:240, //子容器的最大值不能大于总容器的高度 classOn:'on', //点击按钮样式的变化--可为空 speed:5, //速度 , st:0 });new hao_nav().init({ id:'Nav2', //容器的ID btn:'a', //点击的按钮 minH:30, //子容器缩小的最小值 maxH:240, //子容器的最大值不能大于总容器的高度 classOn:'act', //点击按钮样式的变化--可为空 speed:5, //速度 st:1 })</script> </body> </html>
0 0
- 原生JS手风琴下拉(修改)
- 原生JS带动画手风琴下拉
- 原生js写手风琴
- 用原生js写一个手风琴
- 原生js实现手风琴菜单效果 与 css3的过渡实现手风琴效果
- 原生JS实现下拉刷新
- 原生javascript手风琴导航
- js手风琴
- 手风琴下拉菜单demo
- 手风琴下拉列表框
- 手风琴下拉列表
- 原生js实现下拉到底事件
- 仿百度的下拉菜单原生js
- 原生js写网页下拉菜单
- jq手风琴导航下拉切换
- 下拉菜单的手风琴效果
- 手风琴JS特效源码
- JS手风琴插件
- redis复制
- UVA 10129
- 短信验证码自动填写功能的实现
- java.se.io.3.文件拷贝
- Qt之操作Excel(QtXlsxWriter)
- 原生JS手风琴下拉(修改)
- book_乱糟糟的第一次_新手小y
- 原生JS的debounce和throttle
- java.se.io.4.文件夹拷贝
- ajaxfileUpload.js兼容ie7、8、9、10、11、firefox、chrome等浏览器的js代码
- C++基类成员在派生类中的访问属性
- java 抽象类 接口 区别
- Androidstudio 快速设置代码提示不区分大小写
- Java程序员需要注意的五大Docker误区