当前位置:   article > 正文

侧面菜单与滚动条随动 element ui

侧面菜单与滚动条随动 element ui

技术:javascript  vue

实现功能: 侧面菜单与滚动条随动

实现原理:通过监听滚动条的数值,并更改左侧菜单栏的状态。 

代码如下:

  1. <template>
  2. <div>
  3. <!-- 添加布局-->
  4. <el-container style="display: flex;">
  5. <!-- 左侧导航栏-->
  6. <el-aside width="130px" style="background-color: white;">
  7. <!-- 左侧菜单栏:el-menu-item的数量要与右侧主体的监控id对应;类名设置了全局高度-->
  8. <el-menu class="slideNav" id="newcluemenu">
  9. <!--a标签的链接地址与右侧主体监控的组件id对应-->
  10. <el-menu-item index="0"><a href="#customer">客户信息</a></el-menu-item>
  11. <el-menu-item index="1"><a href="#car">车辆信息</a></el-menu-item>
  12. <el-menu-item index="2"><a href="#clue">投保线索</a></el-menu-item>
  13. <el-menu-item index="3"><a href="#insurance">保险信息</a></el-menu-item>
  14. </el-menu>
  15. </el-aside>
  16. <!-- 右侧抽屉主体部分,id为滚动条监控的组件id-->
  17. <el-main class="drawer-body" id="rightsrcoll">
  18. <!-- 清除浮动,用于底沿按钮区固定显示-->
  19. <div class="clearfix">
  20. <!--表单1: id与左侧导航栏的id对应-->
  21. <div id="customer" class="notes_text">
  22. <!-- 分割线-->
  23. <el-divider content-position="left">客户信息</el-divider>
  24. <el-form>
  25. <!--、表单主体-->
  26. </el-form>
  27. </div>
  28. <!--表单2: id与左侧导航栏的id对应-->
  29. <div id="car" class="notes_text">
  30. <el-divider content-position="left">客户信息</el-divider>
  31. <el-form>
  32. <!--、表单主题-->
  33. </el-form>
  34. </div>
  35. </div>
  36. <!-- 底部按钮区-->
  37. <div class="dialog-bottom">
  38. <div class="right">
  39. <el-button @click="cancel" class="buttom-btn">关闭</el-button>
  40. <el-button type="primary" @click="submitForm" class="buttom-btn">确 定</el-button>
  41. </div>
  42. </div>
  43. </el-main>
  44. </el-container>
  45. </div>
  46. </template>
  47. <script>
  48. export default {
  49. data() {
  50. return {
  51. //滚动条高度
  52. scroll: '',
  53. //当前显示的菜单区域
  54. istyle: -1
  55. }
  56. },
  57. methods: {
  58. //监听方法
  59. windowScroll: function() {
  60. this.scroll = document.getElementById('rightsrcoll').scrollTop || document.body.scrollTop
  61. },
  62. //滚动条监控函数
  63. loadSroll: function() {
  64. let divArr = document.querySelectorAll('.notes_text') //内容里面带这个类的
  65. for (var i = 0; i < divArr.length; i++) {
  66. if (this.scroll >= divArr[i].offsetTop - 200) {
  67. //这里其实可以减去一个数值,使其左边的导航栏的样式提前出现,我这里是减去了top栏的高度。
  68. this.istyle = i
  69. }
  70. }
  71. }
  72. },
  73. watch: {
  74. //监听滚动条高度变化
  75. scroll: function() { //用来监听data中的scroll字符串的变化
  76. this.loadSroll()
  77. },
  78. //监听当前显示的菜单序号变化
  79. istyle: function(val) {
  80. //参数id值等于左侧导航菜单的id值
  81. let parent = document.getElementById('newcluemenu')
  82. let menus = parent.getElementsByClassName('el-menu-item')
  83. for (let j = 0; j < menus.length; j++) {
  84. //将所有菜单的活动类去掉
  85. menus[j].classList.remove('is-active')
  86. }
  87. //添加当前活动区域的菜单的活动类
  88. menus[val].classList.add('is-active')
  89. }
  90. },
  91. mounted() {
  92. //创建后开始监控滚动条事件
  93. document.getElementById('rightsrcoll').addEventListener('scroll', this.windowScroll)
  94. }
  95. }
  96. </script>
  97. <style scoped>
  98. </style>

希望能有帮助。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/971923
推荐阅读
相关标签