/*使用块模式--立即执行的匿名函数*/(function(){//所有声明的变量在构造函数内部,不会向windows添加任何属性

/*构造函数的基本规范:

1、构造函数的第一个字母是大写的,与其他函数区分开来

2、调用构造函数的时候需要用new,不然会创建全局变量*/

var Menubar = function(){this.el = document.querySelector('#sidebar ul'); //菜单项的DOM元素通过css的querySelctor查找得到

this.state = 'allClosed';//初始状态时,allClosed,当打开某一个时,则为hasOpened

this.el.addEventListener('click',function(e){//7.1阻止冒泡事件向上传播,这样点击菜单项,只响应菜单项事件,无关sidebar

e.stopPropagation();

});var self = this;var currentOpendMenuContent = null;//7.2点击菜单项添加监听事件

this.menuList = document.querySelectorAll('#sidebar ul > li');for( var i=0; i

var menuContentEl = document.getElementById(e.currentTarget.id + '-content');/*7.2-1:没有打开菜单项,打开响应的菜单项

7.2-2:有打开的菜单项,关闭该菜单项再打开响应的菜单项*/

if(self.state === 'allClosed'){

console.log('打开' +menuContentEl.id);/*9.1菜单项打开的动画效果*/

//先设置菜单栏的高和左边的位置

menuContentEl.style.top = '0px';

menuContentEl.style.left= '-85px';

menuContentEl.classList.add('menuContent-move-right');

self.state= 'hasOpened';

self.currentOpendMenuContent=menuContentEl;

}else{

console.log('关闭' +self.currentOpendMenuContent.id);/*9.2菜单栏关闭的动画效果*/self.currentOpendMenuContent.className= 'nav-content';

self.currentOpendMenuContent.style.top= '0';

self.currentOpendMenuContent.style.left= '35px';

self.currentOpendMenuContent.classList.add('menuContent-move-left')

console.log('打开' +menuContentEl.id);

menuContentEl.className= "nav-content"menuContentEl.style.top= '250px';

menuContentEl.style.left= '35px';

menuContentEl.classList.add('menuContent-move-up');

self.state= 'hasOpened';

self.currentOpendMenuContent=menuContentEl;

}

});

}/*10、关闭按钮的样式*/

this.menuContentList = document.querySelectorAll('.nav-content >div.nav-con-close');for(i=0;i

var menuContent =e.currentTarget.parentNode;

menuContent.className= "nav-content";

menuContent.style.top= '0';

menuContent.style.left= '35px';

menuContent.classList.add('menuContent-move-left');

that.state= 'allClosed';

});

}

};/*1、使用构造函数创建sidebar对象 ,

实例化该对象,向内提供属性eId、closeId*/

var Sidebar = function(eId,closeBarId){/*2、定义对象的状态和属性和方法*/

this.state = 'opened';/*4、继续完成构造函数

4.1、完成对象的初始化,获取所需要的DOM元素

4.2、在构造函数的关闭按钮中增加事件响应函数

{借助Javascript的事件的冒泡传播机制:使用向上冒泡的机制来传播,在'sidebar的div上能监听closebar按钮的事件响应'}*/

this.el = document.getElementById(eId || 'sidebar'); //在参数中,需要传入默认的id以防不提供参数

this.closeBarEl = document.getElementById(closeBarId || 'closeBar');/*4.3、在el元素上面调用事件函数*/

var self = this;/*修改事件函数内的this指向回Sidebar对象有两种方法:

1、修改函数的上下文(比较复杂)

2、javascript的特性--闭包

this指向构造函数返回的对象,则指向下方 new sidebar返回的对象,

闭包原理,再在事件响应函数中调用该变量*/

/*7、在sidebar构造函数中,需要将Menubar函数作为一个属性传进*/

this.menubar = newMenubar();this.el.addEventListener("click",function(event){if(event.target !==self.el){

self.triggerSwitch();//代表打开和关闭的统一函数名称

}

});

};/*3、声明sidebar的两个行为

对象的行为添加在构造函数的原型链上*/Sidebar.prototype.close= function(){

console.log('关闭sidebar');/*8、增加sidebar和关闭按钮的动画效果*/

this.el.className = 'sidebar-move-left';this.closeBarEl.className = 'closeBar-move-right';this.state = 'closed';

};

Sidebar.prototype.open= function(){

console.log('打开sidebar');/*9、增加sidebar打开和关闭按钮向左移动的动画效果*/

//9.1需要先将sidebar的位置定位到上次关闭的位置

this.el.style.left ='-120px';this.el.className = 'sidebar-move-right';this.closeBarEl.style.left = '160px';this.closeBarEl.className = 'closeBar-move-left';this.state = 'opened';

};/*5、增加triggerSwich()函数*/Sidebar.prototype.triggerSwitch= function(){if(this.state === 'opened'){this.close();

}else{this.open();

}

};/*6、验证构造函数的成果

6.1在close函数中console.log输出值来验证

6.2增加test单元测试,单元测试一直伴随代码存在*/

var sidebar = newSidebar();

})();

js 点击侧边栏展示内容_【DEMO】JS实现侧边栏信息展示效果相关推荐

  1. 如何用js语句给mysql添加内容_在js里写SQL的方法

    在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...

  2. 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法

    1. 添加新元素 动态添加新元素 Coffee Tea Coffee Tea var child = document.getElementsByClassName("child" ...

  3. 原生js清空上一个元素内容_原生js系列 删除元素

    // 删除id var idObject = document.getElementById('sidebar'); if (idObject != null) idObject.parentNode ...

  4. JS点击显示隐藏内容

    JS点击显示隐藏密码 思路:获取元素,判断点击,如果DIV显示就隐藏,如果DIV隐藏就显示出来. 1 if(DIV是显示的){ 2 div.style.display='none'; 3 } 4 el ...

  5. js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容

    相关推荐:https://www.huisheng.com/ 上海SEO优化网站侧边栏一般添加什么内容?企业做网站每个板块都是非常重要的,之前跟大家解析了关于导航栏的布局,哪些内容该添加,哪些内容不该 ...

  6. js 点击侧边栏展示内容_左边菜单,点击左边右边内容改变

    统计报表 进货报表 出货报表 毛利报表 仓库管理 商品列表 盘点 出库列表 入库列表 订单管理 订单列表 采购申请 系统设置 权限设置 资料管理 修改密码 先写出一个上菜的菜单. 千万记住链接后面的t ...

  7. js检测鼠标是否在操作_原生JS趣味demo:炫酷头像鼠标追随效果的实现

    我们常在一些网页中 可以看到鼠标追随效果 一个简单的图片.动画 甚至一小段文字 都可以作为鼠标跟随的载体 之前咱们的直播课中 老师也讲过相关的canvas追随粒子特效 今天 就让我们一起来用原生js ...

  8. input点击事件不能用_用js简单写一个计算器

    嗨,大家好,今天给大家带来的是一个计算器 首先要知道我们常用的计算器都有哪些按键,有'0~9','+' ,' -' , '*', '/',还有'=' 和'.',基本是这些按键,然后我们去创建一些按键. ...

  9. alert获取输入框内容_用JS怎样获取文本框的值

    展开全部 代码示例: document.getElementById("id").innerHTML //获取62616964757a686964616fe59b9ee7ad943 ...

最新文章

  1. 给计算机图片文件夹加密码,电脑文件夹设置密码的方法是什么【图文】
  2. 你真的会学习吗?从结构化思维说起
  3. 【Python】全网最新最全Pyecharts可视化教程(三):制作多个子图
  4. android一句话搞定图片加载
  5. Hibernate 对象的三种状态
  6. 前端学习(3265):js中undefine中3相关属性
  7. phpstudy能安装不带mysql的么_装了phpstudy还需要装mysql吗
  8. 【活动预告】数据资产化论坛
  9. macOS Big Sur11.2发布候选版更新:修复蓝牙和显示连接问题
  10. 【译】区块链是如何工作的——用JavaScript演示
  11. java直接选择排序_Java排序大法-直接选择排序
  12. 互联网行业不需要中年人,那些35岁离开BAT的人都去哪了?
  13. Ubuntu常用终端命令
  14. 对Photoshop高斯模糊滤镜的算法总结
  15. 超燃动态可视化条形图源码及效果图_40行不到的Python代码实现超燃动态排序图...
  16. 常见的监控项目组网方案技术系统图,一文了解清楚!
  17. 一文读懂反向传播算法原理
  18. Python北京二手房房价数据集分析
  19. python安装jupyterlab_Jupyter/JupyterLab安装使用
  20. java设置post超时时间_HttpClient 如何设置超时时间

热门文章

  1. 【高端】几个关于SCSS中for循环的高级玩法
  2. Revit的Enscape基本培训(2021) Enscape Essential Training for Revit (2021)
  3. AI矢量绘图软件技能学习视频教程
  4. 前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度
  5. springboot redis配置
  6. [转]单点登录原理与简单实现
  7. UIActionSheet在iOS8中被弃用造成的错误
  8. 为什么必须是final的呢?
  9. 场面话大全,绝对受用一生
  10. 非递归一次性加载分类数据到TreeViw