[ HTML + CSS + jQuery ] 实现侧边栏sidebar:点击底部导航栏上的按钮打开侧边栏,从右向左滑出,再次点击按钮收起

11 篇文章 0 订阅
10 篇文章 0 订阅

一个简单有效的侧边栏实现办法

今天在做项目的时候,需要实现一个侧边栏效果,一开始想到用Bootstrap,但是collapse这样的组件只能向下或向上打开,于是在网上研究了一阵,总结出目前觉得效果理想的最简单的办法。

效果示例:

在这里插入图片描述

HTML代码:

<!-- 为方便看清楚,这里去掉了自定义的Bootstrap样式,只写关联的代码 -->

<!-- 固定在底部的导航栏 -->
<nav class="nav fixed-bottom">
    <a href="#" class="nav-item nav-link active">主页</a>
    <a href="#" class="nav-item nav-link">导航1</a>
    <a href="#" class="nav-item nav-link">导航2</a>
    <!-- 触发侧边栏的按钮 -->
    <button type="button" id="sidebarToggler">打开侧边栏</button>
</nav>
<!-- 侧边栏区域的内容示例 -->
<div id="sideBar" class="sidebarClass">
   <ul>
       <li>侧边栏菜单项1</li>
       <li>侧边栏菜单项2</li>
       <li>侧边栏菜单项3</li>
   </ul>
</div>

CSS代码:

/* 如果需要侧边栏跨过底部导航栏,先需要知道导航栏的高度 */
nav {
    height: 2.5rem;
}
/* 一定要写在class选择器里!等会儿jquery要用到 */
.sidebarClass {
    position: fixed;    /* 先给个定位,侧边栏一般是相对于浏览器定位 */
    right: -50%;    /* 侧边栏有多宽,就-多少,相当于先藏在视窗外边(从左边打开的话就换成left) */
    width: 50%;
    height: calc(100vh - 2.5rem);    /* 减去底部导航栏的高度 */
    z-index: 9999;    /* 设置一个超大的数字覆盖所有元素,如果层叠不够或者未设置,那么侧边栏可能会被其他元素遮挡 */
    transition: width 1s;    /* 最关键的一步!利用transition实现过渡效果,这里只需要水平过渡,所以width就行了,后面的时间几秒自行设置 */
}
/* 新建一个class,等会儿jquery要用到,原理也是利用transition:width改变就会启动过渡效果 */
.addWidth {
    width: 100%;    /* 设置为侧边栏宽度的2倍,才能完全露出 */
}

jQuery代码:

//当然是定义按钮的点击事件啦
$("#sidebarToggler").click(function () {
    var sideBar = $("#sideBar");
    //我的逻辑上是先判断没有这个class,没有的话就添加,这个添加动作会触发宽度加长的过渡效果
    if (!sideBar.hasClass("addWidth")) {
        $("#sideBar").addClass("addWidth");
    }
    //同理,展开之后要切换,移除这个class来触发减小宽度的过渡效果
    else {
        $("#sideBar").removeClass("addWidth");
    }
})

Over.


下面是一个使用 jQuery 实现侧边栏导航滑动页面时对应导航会跟着改变颜色,点击也可以跳转到对应内容的示例代码: HTML: ```html <div class="sidebar"> <ul> <li><a href="#section1">Section 1</a></li> <li><a href="#section2">Section 2</a></li> <li><a href="#section3">Section 3</a></li> <li><a href="#section4">Section 4</a></li> </ul> </div> <div class="main-content"> <section id="section1"> <h2>Section 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </section> <section id="section2"> <h2>Section 2</h2> <p>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </section> <section id="section3"> <h2>Section 3</h2> <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </section> <section id="section4"> <h2>Section 4</h2> <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> </section> </div> ``` CSS: ```css .sidebar { position: fixed; top: 0; left: 0; width: 200px; height: 100%; background-color: #f1f1f1; } .main-content { margin-left: 200px; } .sidebar ul { list-style-type: none; margin: 0; padding: 0; } .sidebar li { margin: 10px 0; } .sidebar a { display: block; padding: 10px; color: #000; text-decoration: none; } .sidebar a.active { background-color: #ccc; } .main-content section { padding: 50px; margin-top: 70px; background-color: #fff; box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); } ``` JavaScript: ```javascript $(document).ready(function() { // 高亮当前导航 var sections = $('section'), nav = $('.sidebar'), nav_height = nav.outerHeight(); $(window).on('scroll', function() { var cur_pos = $(this).scrollTop(); sections.each(function() { var top = $(this).offset().top - nav_height, bottom = top + $(this).outerHeight(); if (cur_pos >= top && cur_pos <= bottom) { nav.find('a').removeClass('active'); sections.removeClass('active'); $(this).addClass('active'); nav.find('a[href="#'+$(this).attr('id')+'"]').addClass('active'); } }); }); // 平滑滚动到锚点 $('a').on('click', function(e) { if (this.hash !== '') { e.preventDefault(); var hash = this.hash; $('html, body').animate({ scrollTop: $(hash).offset().top - nav_height }, 800, function() { window.location.hash = hash; }); } }); }); ``` 代码解释: 1. 在 HTML 中,我们使用 `<div class="sidebar">` 元素包裹侧边栏导航,使用 `<div class="main-content">` 元素包裹主要内容,每个主要内容元素使用 `<section>` 标签。 2. 在 CSS 中,我们设置侧边栏导航的样式,包括固定在左侧、背景颜色、字体颜色等。 3. 在 JavaScript 中,我们使用 `$(document).ready()` 方法等待文档加载完成,然后执行以下操作: 1. 使用 `$(window).on('scroll', function() {...})` 监听滚动事件,当页面滚动时,高亮当前导航。 2. 使用 `$('a').on('click', function(e) {...})` 监听点击事件,当点击导航链接时,平滑滚动到锚点。 这样就实现了一个简单的侧边栏导航滑动页面时对应导航会跟着改变颜色,点击也可以跳转到对应内容的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值