.._jsp中页面右侧浮动导航点击定位至指定内容">
    查看
    • 编辑修改
    • 首页
    • UNITY
    • NODEJS
    • PYTHON
    • AI
    • GIT
    • PHP
    • GO
    • CEF3
    • JAVA
    • HTML
    • CSS
    devbox
    繁依Fanyi0
    这个屌丝很懒,什么也没留下!
    关注作者
    热门标签
    • jquery
    • HTML
    • CSS
    • PHP
    • ASP
    • PYTHON
    • GO
    • AI
    • C
    • C++
    • C#
    • PHOTOSHOP
    • UNITY
    • iOS
    • android
    • vue
    • xml
    • 爬虫
    • SEO
    • LINUX
    • WINDOWS
    • JAVA
    • MFC
    • CEF3
    • CAD
    • NODEJS
    • GIT
    • Pyppeteer
    • article
    热门文章
    • 1污水处理行业:环保远程控制网关S275引领行业变革
    • 2webGL编程指南实战教程
    • 3H5移动web页面触摸按钮效果实现-模拟按钮hover效果实现_h5 csstouch效果怎么实现
    • 4xxl_job--定时任务框架_xxjob定时任务每半小时跑一边,从八点半到下午四点半
    • 5el-dialog中的el-form-item 文字超过长度,设置隐藏,最后面用三个点表示_el-form-item中label文字超长
    • 6Nginx读书笔记(3) —— 模块添加之config文件的写法_$ngx_addon_dir
    • 7【Unity】Unity协程(Coroutine)的原理与应用_unity coroutine
    • 8*p++、*(p++)、*++p、*(++p)、(*p)++、++*p区别和用法
    • 9docker拉取Ubuntu20.04_ubuntu20.04 拉起docker
    • 10Maven配置远程仓库-详细操作_maven-source-plugin 部署 远程仓库
    当前位置:   article > 正文

    js实现,点击侧边导航栏,可以平缓的跳到界面指定位置,同时当界面某个元素在浏览器可视范围的时候,相应的导航栏也显示相应的样式_jsp中页面右侧浮动导航点击定位至指定内容

    作者:繁依Fanyi0 | 2024-02-11 20:49:03

    赞

    踩

    jsp中页面右侧浮动导航点击定位至指定内容

    注:要下载安装好jquery和element-ui

    1. "element-ui": "^2.15.8"
    2. "jquery": "^3.6.0"

    有时候在使用‘$’报错找不到,可以直接在组件内这样使用

    1. import $ from 'jquery'
    2. window.jQuery = $
    3. window.$ = $

    效果如下:

     html代码:

    1. <div>
    2. <div class="navBox">
    3. <ul class="navigation">
    4. <li class="currentLi"><i class="el-icon-top" @click="goUp"></i></li>
    5. <li
    6. v-for="(item,index) in navList"
    7. :key="index"
    8. class="navLi"
    9. @mouseover="liSeover(item,index)"
    10. >
    11. <span class="navListTitle">{{ item.title }}</span>
    12. <span v-if="index===currentIndex" class="blacDian"></span>
    13. <a :class="index===currentIndex?'currentClick':''" :href="item.name" :title="item.title"
    14. @click="changji(item.name,index)">{{ item.current }}</a>
    15. </li>
    16. <li class="currentLi"><i class="el-icon-bottom" @click="goDown"></i></li>
    17. </ul>
    18. </div>
    19. <div id="xxx1" style="height: 600px;width: 100%;background-color: #95542E"><h1>xxx1</h1></div>
    20. <div id="xxx2" style="height: 600px;width: 100%;background-color: red"><h1>xxx2</h1></div>
    21. <div id="xxx3" style="height: 600px;width: 100%;background-color: rebeccapurple"><h1>xxx3</h1></div>
    22. <div id="xxx4" style="height: 600px;width: 100%;background-color: royalblue"><h1>xxx4</h1></div>
    23. <div id="xxx5" style="height: 600px;width: 100%;background-color: green"><h1>xxx5</h1></div>
    24. <div id="xxx6" style="height: 600px;width: 100%;background-color: antiquewhite"><h1>xxx6</h1></div>
    25. <div id="xxx7" style="height: 600px;width: 100%;background-color: #122B3F"><h1>xxx7</h1></div>
    26. </div>

    css代码:

    1. .navListTitle {
    2. position: absolute;
    3. left: -60px;
    4. top: 0;
    5. font-size: 12px;
    6. display: none;
    7. }
    8. .navLi:hover .navListTitle {
    9. display: block;
    10. }
    11. .blacDian {
    12. display: inline-block;
    13. width: 5px;
    14. height: 5px;
    15. border-radius: 50%;
    16. background: #DC6821;
    17. position: absolute;
    18. top: 7px;
    19. left: 3px;
    20. }
    21. .currentClick {
    22. color: #DC6821;
    23. }
    24. .navBox {
    25. position: fixed;
    26. right: 30px;
    27. top: 25%;
    28. border: 1px solid;
    29. width: 50px;
    30. box-sizing: border-box;
    31. }
    32. .navigation li {
    33. list-style-type: none;
    34. margin: 40px 0;
    35. position: relative;
    36. }
    37. a {
    38. text-decoration: none;
    39. color: white;
    40. }
    41. a:hover, .currentLi:hover {
    42. color: #DC6821;
    43. cursor: pointer;
    44. }
    45. * {
    46. margin: 0;
    47. padding: 0;
    48. }

    js代码:

    1. data () {
    2. return {
    3. currentIndex: 0,
    4. currentPoint: '',
    5. navList: [
    6. {name: '#xxx1', title: '第1个导航', current: '01'},
    7. {name: '#xxx2', title: '第2个导航', current: '02'},
    8. {name: '#xxx3', title: '第3个导航', current: '03'},
    9. {name: '#xxx4', title: '第4个导航', current: '04'},
    10. {name: '#xxx5', title: '第5个导航', current: '05'},
    11. {name: '#xxx6', title: '第6个导航', current: '06'},
    12. {name: '#xxx7', title: '第7个导航', current: '07'}
    13. ]
    14. }
    15. },
    16. mounted () {
    17. $(window).on('scroll', () => {
    18. let el1 = document.getElementById('xxx1')
    19. let el2 = document.getElementById('xxx2')
    20. let el3 = document.getElementById('xxx3')
    21. let el4 = document.getElementById('xxx4')
    22. let el5 = document.getElementById('xxx5')
    23. let el6 = document.getElementById('xxx6')
    24. let el7 = document.getElementById('xxx7')
    25. let arr = [el1, el2, el3, el4, el5, el6, el7]
    26. arr.forEach((k) => {
    27. if (this.isInViewPort(k)) {
    28. console.log(k.id)
    29. let findIndex = '#' + k.id
    30. this.navList.forEach((o, i) => {
    31. if (o.name === findIndex) {
    32. this.currentIndex = i
    33. this.currentPoint = o.name
    34. }
    35. })
    36. }
    37. })
    38. })
    39. }
    40. methods:{
    41. goUp () {
    42. this.navList.forEach((o,i)=>{
    43. if (o.name === this.currentPoint) {
    44. if (i===0) {
    45. this.$message({
    46. message: '当前已是第一个!',
    47. type: 'warning'
    48. });
    49. return
    50. }
    51. document.querySelector(this.navList[i-1].name).scrollIntoView({behavior: 'smooth'})
    52. }
    53. })
    54. },
    55. goDown() {
    56. this.navList.forEach((o,i)=>{
    57. if (o.name === this.currentPoint) {
    58. if (i === this.navList.length-1) {
    59. this.$message({
    60. message: '当前已是最后一个!',
    61. type: 'warning'
    62. });
    63. return
    64. }
    65. document.querySelector(this.navList[i+1].name).scrollIntoView({behavior: 'smooth'})
    66. }
    67. })
    68. },
    69. liSeover (item, index) {
    70. },
    71. changji (value, index) {
    72. this.currentIndex = index
    73. // eslint-disable-next-line no-undef
    74. // 綁定導航列每個 a 的點擊事件
    75. $('.navigation > li > a').click(function (e) {
    76. e.preventDefault() // 取消預設動作(直接跳轉到錨點)
    77. // 改由 jquery 的 animate 實現平滑移動到錨點
    78. $('html, body').animate({
    79. // 取得原先要移動至的元素,取得離上方距離,在 300ms 內完成捲軸動畫
    80. scrollTop: $($.attr(this, 'href')).offset().top
    81. }, 500)
    82. })
    83. },
    84. // 判断一个元素是否在可视区域中方法2
    85. isInViewPort (element) {
    86. const viewWidth = window.innerWidth || document.documentElement.clientWidth || ''
    87. const viewHeight = window.innerHeight || document.documentElement.clientHeight || ''
    88. const {
    89. top,
    90. right,
    91. bottom,
    92. left,
    93. } = element.getBoundingClientRect()
    94. return (
    95. top >= 0 &&
    96. left >= 0 &&
    97. right <= viewWidth &&
    98. bottom <= viewHeight
    99. )
    100. },
    101. // 判断一个元素是否在可视区域中方法1
    102. isInViewPortOfOne (el) {
    103. // viewPortHeight 兼容所有浏览器写法
    104. const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
    105. const offsetTop = el.offsetTop
    106. const scrollTop = document.documentElement.scrollTop
    107. const top = offsetTop - scrollTop
    108. return top <= viewPortHeight
    109. }
    110. }

    说明:

    1、document.querySelector(this.navList[i-1].name).scrollIntoView({behavior: 'smooth'})该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域,

    2、changji()方法将点击a标签,平缓的移动到href='id'绑定的id的位置,使用jquery中的animate来进行,所以确保自己项目安装了juqery

    3、currentClick类样式来区别当前是那个导航栏或者当前那个元素在浏览器可视范围的样式,依赖index(当前点击的侧边导航栏或者当前在浏览器可视范围的元素来控制)

    4、currentPoint属性很重要,它保存的是当前是那个元素在浏览器的可视范围,值为每个元素的id值,如:‘#xxx7’,导航栏最上面和最下面的两个箭头,就是依赖这个值来进行的

    5、isInViewPort()方法用来判断当前是哪个元素在浏览器的可视访问,执行它放回的是一个布尔值,然后再组件的生命周期函数mounted里面监听窗口滚动条的变化,当滚动条变化时,给每一个元素绑定isInViewPort()方法,来识别当前是那个元素在浏览器可视范围来改变index的值,从而改变当前导航栏的样式,已到达我们目的

    添加个额外知识

    1:clientWidth和clientHeight: 可视部分的高度和宽度,content+padding,如果出现滚动条,会覆盖元素宽高,减去滚动条的宽高:

    2:clientLeft和clientTop这个属性指的就是读取它本身这个元素border的宽度和高度
    3:offsetWidth和offsetHeight: content+padding+border,与滚动条无关,最终滚动条会包裹在它们里面:4:offsetLeft和offsetTop两个比较抽象,就是偏移的意思,这个一般是它自己本事的偏移,如元素身上有margin,left,top,等,一般都是根据最近的定位元素的父级来定的偏移多少,通常与offsetParent属性结合做一些动画

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/76894
    推荐阅读
    • articlejQuery图片tab栏切换...
      1 <script> 2 $(function(){ 3 $('.tab li').mouseenter(f...

      赞

      踩

    • article语义分割:基于openCV和深度学习(二)_opencv 语义分割...
      语义分割:基于openCV和深度学习(二)Semantic segmentation in images with Op...

      赞

      踩

    • article获取List中存放的最后一个元素_c++ lsit最后一位...
      public class ListUtil { /** * 获取list中存放的最后一个元素 * @param list...

      赞

      踩

    • article2022年职业院校技能大赛高职组云计算赛项试卷——云计算赛项第三场-公有云_在default命名空间...
      do sleep 1;使用intnetX-mysql网络创建两台chinaskill-sql-1和chinaskill-...

      赞

      踩

    • articlecirros-0.3.4-x86_64-disk.img下载...
      今天在官网上下载这个费了好长时间,为了以后可以节省大家的时间,我把这个拿出来,大家有需要的可以下载下来学习~链接:htt...

      赞

      踩

    • article标准I/O与文件I/O的区别_标准io和文件io的区别...
      1.来源文件I/O(低级I/O)是Linux系统调用,通过系统调用来访问文件,返回一个文件描述符,可以直接对文件进行读写...

      赞

      踩

    • article1.CVAT建项目步骤...
      CVAT的标注最小单位是Task,每个Task为一个标注任务。1.CVAT建项目步骤 ...

      赞

      踩

    • article04X_%04x...
      String.format("%04X","xxxx")定义按16进制输出数据,最小输出宽度为4个字符,右对齐,如果输出...

      赞

      踩

    • articlePyQt5 ——Qt Designer配置与使用_qt designer找不到filedialog控...
      转载:链接:https://www.jianshu.com/p/5b063c5745d0Qt Designer的介绍在P...

      赞

      踩

    • article前端eslint+prettier+lint-staged配置_hbuilderx "vetur.v...
      前端eslint+prettier+lint-staged配置_hbuilderx "vetur.validation....

      赞

      踩

    • article虚拟机的vmem lck到底是个啥玩意 用虚拟机很有可能一不小心就把虚拟机搞崩了如何解决_重新安装v...
      首先 vmem lck 这俩文件是在打开虚拟机运行的时候才有的并且在关闭运行的虚拟机 再把虚拟机本身这个软件关掉 这俩文...

      赞

      踩

    • article微信小程序 按钮点击动态展开收起(开发记录)_微信小程序 - 实现文本展开与收起功能组件...
      wxml代码 [详细] -->

      赞

      踩

    • articleSTM32的堆栈_stm32 堆栈是什么意思...
      堆栈是RAM的一个区域,只有在程序运行的时候占用RAM在stm32的启动文件.s文件里面,就有堆栈的设置,其实这个堆栈的...

      赞

      踩

    • articlePython的PyQt框架的使用-资源文件夹的使用_pyqt5导入文件夹作为img.prc...
      让我们一起学习,Python的PyQt框架的使用-资源文件夹的使用(一起努力,咱们顶峰相见!!!)_pyqt5导入文件夹...

      赞

      踩

    • articleC语言printf的输出格式大全及颜色字体打印_c printf 格式大全...
      也许你已经熟练掌握了,也许有些小方面还是不太熟悉,要想真正学好它,就一定要理解他,感兴趣可以进来看一看_c printf...

      赞

      踩

    • article科大讯飞TTS接口调用保存为mp3格式_tts转mp3...
      不废话,直接上codepackage com.iflytek.voicecloud.webapi.demo;import...

      赞

      踩

    • article小程序API开发——文件FileSystemManager参数汇总...
      是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。小程序API开发——文件F...

      赞

      踩

    • article【融云分析】选择IM云服务,需要看哪些核心技术指标?...
      IM(即时通讯)云服务已发展数年,不少企业与开发者都倾向于选择第三方IM云服务,短平快地为应用添加即时通讯能力,但如何选...

      赞

      踩

    • articlejava项目部署-将jar包上传至云服务器并运行-nohup的使用_nohup java...
      大家应该都是到在windows系统怎么运行一个jar包,就是通过java -jar xxx.jar的命令,在Linux系...

      赞

      踩

    • articleel-tree文字显示不全的解决办法_treeview里面的node的文本在界面中显示不完整...
      el-tree文字显示不全的解决办法_treeview里面的node的文本在界面中显示不完整treeview里面的nod...

      赞

      踩

    相关标签
    • javascript
    • ViewUI
    • 云计算
    • node
    • 数据库
    • 华为云
    • python
    • 镜像
    • cirros
    • 图像处理
    • 目标检测
    • 前端
    • vue.js
    • npm
    • es6
    • vmware
    • 虚拟机
    • 微信小程序
    • 按钮
    • pyqt
    • qt

    Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。

      

    闽ICP备14008679号