bootstrap+spring boot实现面包屑导航功能(前端代码)


Posted in Javascript onOctober 09, 2019

面包屑导航介绍

一般的内容型网站,例如CMS都会有这种面包屑导航。总结起来它有以下优势:

bootstrap+spring boot实现面包屑导航功能(前端代码)

让用户了解目前所在的位置,以及当前页面在整个网站中所在的位置;

体现了网站的架构层级;提高了用户体验;

减少返回到上一级页面的操作;

实现效果

那我们应该如何实现?我看网上多数都是只提供静态实现,

这里我结合bootstrap 和 spring boot以及mysql来做一个完整的例子。

bootstrap+spring boot实现面包屑导航功能(前端代码)

表结构设计

图里面的菜单其实是分级维护上下级关系的。我这里用到了2级,表里有level字段标记。

点击第1级加载第2级分类,点击第2级分类名称则展示面包屑导航。

CREATE TABLE `tb_category` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `category_name` varchar(100) NOT NULL,
 `parent_id` bigint(20) DEFAULT NULL,
 `level` tinyint(1) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
insert into tb_category values(1,'Java文档',0,1);
insert into tb_category values(2,'Java多线程',1,2);
insert into tb_category values(3,'Spring Boot',1,2);
insert into tb_category values(4,'微服务实战',1,2);
insert into tb_category values(5,'Java视频',0,1);
insert into tb_category values(6,'Java基础',5,2);
insert into tb_category values(7,'Java基础',1,2);
commit;

前端代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
   xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>响应式布局</title>
  <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<input type="text" id="ctx" hidden="hidden" th:value="${#request.getContextPath()}">
<div class="container-fluid">
  <!--页头-->
  <nav class="navbar navbar-inverse">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
            data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" th:href="@{'/breadCrumb'}" rel="external nofollow" >Java分享</a>
      </div>
      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav" id="navbar">
        </ul>
      </div>
    </div>
  </nav>
  <!--面包屑-->
  <ol class="breadcrumb">
  </ol>
  <div class="list-group" id="submenu-list">
  </div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
  var ctx=$("#ctx").val();
  $(function () {
    // 获取一级菜单
    getMenu(null,1);
  });
  function getMenu(id, level){
    var json = {parentId:id,level:level};
    $.ajax({
      url: ctx+"/myCategory/list",
      type: "POST",
      contentType: "application/json",
      dataType: "json",
      data: JSON.stringify(json),
      success: function (result) {
        var text='';
        if (result.success) {
          if(result.data != null){
            // 一级菜单
            if(level!=null){
              $.each(result.data, function (i, r) {
                text += '<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" οnclick="getMenu('+r.id+')">'+r.categoryName+'</a></li>'
              });
              $("#navbar").empty();
              $("#navbar").append(text);
            }
            // 子菜单
            if(id!=null){
              $.each(result.data, function (i, r) {
                console.log(i);
                text += '<a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="list-group-item" οnclick="getBreadCrumb('+r.id+')">'+r.categoryName+'</a>'
              });
              $("#submenu-list").empty();
              $("#submenu-list").append(text);
            }
          }
        } else {
          alert(result.message);
        }
      }
    });
  }
  // 生成面包屑导航
  function getBreadCrumb(id) {
    var param = {id:id};
    $.ajax({
      url: ctx+"/myCategory/getParentList",
      type: "GET",
      data: {"id":id},
      success: function (result) {
        var text='';
        if(result.data!=null){
          text = '<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首页</a></li>';
          $.each(result.data, function (i, r) {
            text += '<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >'+r.categoryName+'</a></li>'
          });
          $(".breadcrumb").empty();
          $(".breadcrumb").append(text);
        }
      }
    })
  }
</script>
</body>
</html>

总结

以上所述是小编给大家介绍的bootstrap+spring boot实现面包屑导航功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
用js+xml自动生成表格的东西
Dec 21 Javascript
百度留言本js 大家可以参考下
Oct 13 Javascript
ExtJS下grid的一些属性说明
Dec 13 Javascript
javascript中length属性的探索
Jul 31 Javascript
JavaScript 判断浏览器是否支持SVG的代码
Mar 21 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
Aug 29 Javascript
浅谈webpack 四个核心概念之Entry
Jun 12 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 #Javascript
微信小程序本地存储实现每日签到、连续签到功能
Oct 09 #Javascript
Vue.js实现大转盘抽奖总结及实现思路
Oct 09 #Javascript
js基础之事件捕获与冒泡原理
Oct 09 #Javascript
微信内置浏览器图片查看器的代码实例
Oct 08 #Javascript
vue封装swiper代码实例解析
Oct 08 #Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 #jQuery
You might like
用 php 编写的日历
2006/10/09 PHP
php whois查询API制作方法
2011/06/23 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
详解Python中for循环的使用方法
2015/05/14 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
估算杭州有多少软件工程师
2015/08/11 面试题
安全大检查反思材料
2014/01/31 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle