vue实现点击按钮展开侧边栏,再点击按钮收起

最近项目里有个需求需要点击按钮实现侧边栏展开收起状态,看了很多,其他实现都是比较复杂的,下方是用最简便的代码实现想要的效果。
如果所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb243142ef09494a9217e722b7d9ff15.png

//侧边栏内容区域 
//为了看的方便,只放主要代码,内容根据需求定义
<div class="m-slidebar" >
	//按钮区域
    <span class="m-closeBtn" id='m-closeBtn' @click="dianji"><Icon color="white" icon="ant-design:right-circle-outlined"></Icon></span>
    <div>内容区域</div>
</div>
//style样式区域
<style scoped lang='less'>
.addWidth {
  height: 100vh!important;
  right: 0px!important;
  width: 580px!important;
  min-width:580px!important;
  position: absolute;
  z-index: 11!important;
  top: 0px!important;
  bottom: 0px!important;
}
//我这里用的绝对定位,当然我在其他地方也有设置相对定位,我这里有个地图,不用绝对定位会覆盖,你们也可以使用固定定位.
.m-slidebar{
  height: 100vh!important;
  transition: width 1s;
  right: -580px;    /* 侧边栏有多宽,就-多少,相当于先藏在视窗外边(从左边打开的话就换成left),我这个侧边栏在右边 */
  width: 580px;
  min-width: 580px;
  position: absolute;   
  z-index: 11;
  transition: all 0.2s;
  height: calc(100vh - 2.5rem);
  background: white;
  box-shadow: 0px 5px 5px rgba(11,2,5,0.1);
  top: 0px;
  bottom: 0px;
  .m-closeBtn{
    position: absolute;
    width: 30px;
    height: 40px;
    left: -30px;
    background-image: linear-gradient(135deg, #5e60eb 3%, #4282fa 100%),linear-gradient(#edf2fc, #edf2fc);
    box-shadow: 0px 5px 5px rgba(11,2,5,0.1);
    border-radius: 6px 0px 0px 6px;
    text-align: center;
    line-height: 40px;
    cursor: pointer;
	}
}
</style>

1.vue项目没有用到jquery的话,就用原生js方法如下代码:

//添加按钮点击事件
function dianji() {
  //获取dom元素
  var sideBar = document.getElementsByClassName('m-slidebar')[0];
  //我的逻辑上是先判断没有这个class,没有的话就添加,这个添加动作会触发宽度加长的过渡效果
  console.log(sideBar.classList);
  if(!sideBar.classList.contains('addWidth')){
    console.log(sideBar.classList.contains('addWidth'));
    console.log(sideBar.classList);
    sideBar.classList.add("addWidth")
    
  }
 //同理,展开之后要切换,移除这个class来触发减小宽度的过渡效果
  else{
    sideBar.classList.remove("addWidth");
  }
}

2.Jquery写法

//
$("#m-closeBtn").click(function () {
    var sideBar = $(".m-slidebar");
    //我的逻辑上是先判断没有这个class,没有的话就添加,这个添加动作会触发宽度加长的过渡效果
    if (!sideBar.hasClass("addWidth")) {
        $(".m-slidebar").addClass("addWidth");
    }
    //同理,展开之后要切换,移除这个class来触发减小宽度的过渡效果
    else {
        $(".m-slidebar").removeClass("addWidth");
    }
})
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值