js 点击侧边栏展示内容_【DEMO】JS实现侧边栏信息展示效果
/*使用块模式--立即执行的匿名函数*/(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实现侧边栏信息展示效果相关推荐
- 如何用js语句给mysql添加内容_在js里写SQL的方法
在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...
- 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法
1. 添加新元素 动态添加新元素 Coffee Tea Coffee Tea var child = document.getElementsByClassName("child" ...
- 原生js清空上一个元素内容_原生js系列 删除元素
// 删除id var idObject = document.getElementById('sidebar'); if (idObject != null) idObject.parentNode ...
- JS点击显示隐藏内容
JS点击显示隐藏密码 思路:获取元素,判断点击,如果DIV显示就隐藏,如果DIV隐藏就显示出来. 1 if(DIV是显示的){ 2 div.style.display='none'; 3 } 4 el ...
- js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容
相关推荐:https://www.huisheng.com/ 上海SEO优化网站侧边栏一般添加什么内容?企业做网站每个板块都是非常重要的,之前跟大家解析了关于导航栏的布局,哪些内容该添加,哪些内容不该 ...
- js 点击侧边栏展示内容_左边菜单,点击左边右边内容改变
统计报表 进货报表 出货报表 毛利报表 仓库管理 商品列表 盘点 出库列表 入库列表 订单管理 订单列表 采购申请 系统设置 权限设置 资料管理 修改密码 先写出一个上菜的菜单. 千万记住链接后面的t ...
- js检测鼠标是否在操作_原生JS趣味demo:炫酷头像鼠标追随效果的实现
我们常在一些网页中 可以看到鼠标追随效果 一个简单的图片.动画 甚至一小段文字 都可以作为鼠标跟随的载体 之前咱们的直播课中 老师也讲过相关的canvas追随粒子特效 今天 就让我们一起来用原生js ...
- input点击事件不能用_用js简单写一个计算器
嗨,大家好,今天给大家带来的是一个计算器 首先要知道我们常用的计算器都有哪些按键,有'0~9','+' ,' -' , '*', '/',还有'=' 和'.',基本是这些按键,然后我们去创建一些按键. ...
- alert获取输入框内容_用JS怎样获取文本框的值
展开全部 代码示例: document.getElementById("id").innerHTML //获取62616964757a686964616fe59b9ee7ad943 ...
最新文章
- 给计算机图片文件夹加密码,电脑文件夹设置密码的方法是什么【图文】
- 你真的会学习吗?从结构化思维说起
- 【Python】全网最新最全Pyecharts可视化教程(三):制作多个子图
- android一句话搞定图片加载
- Hibernate 对象的三种状态
- 前端学习(3265):js中undefine中3相关属性
- phpstudy能安装不带mysql的么_装了phpstudy还需要装mysql吗
- 【活动预告】数据资产化论坛
- macOS Big Sur11.2发布候选版更新:修复蓝牙和显示连接问题
- 【译】区块链是如何工作的——用JavaScript演示
- java直接选择排序_Java排序大法-直接选择排序
- 互联网行业不需要中年人,那些35岁离开BAT的人都去哪了?
- Ubuntu常用终端命令
- 对Photoshop高斯模糊滤镜的算法总结
- 超燃动态可视化条形图源码及效果图_40行不到的Python代码实现超燃动态排序图...
- 常见的监控项目组网方案技术系统图,一文了解清楚!
- 一文读懂反向传播算法原理
- Python北京二手房房价数据集分析
- python安装jupyterlab_Jupyter/JupyterLab安装使用
- java设置post超时时间_HttpClient 如何设置超时时间