IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue项目使用锚点双向定位 实现滚动功能 -> 正文阅读

[JavaScript知识库]vue项目使用锚点双向定位 实现滚动功能

vue项目使用锚点双向定位滚动功能

如图所示:
点击左侧菜单可以跳转到对应内容,鼠标滚轮滚动时菜单也根据内容显示active项

代码如下:

给父盒子一个id

      <div class="case-infos" id="content">
        <ul class="tabs">
          <li
            v-for="(item, index) in tabsList"
            :key="index"
            :class="{ active: index === activeIndex }"
            @click.stop="toContent(item, index)"
          >
            {{ item.name }}
          </li>
        </ul>

        <div class="case-content">
          <div
            v-for="(item, index) in tabsList"
            :key="index"
            :id="`content-item${index}`"
          >
            <div class="content-name">{{ item.name }}</div>
            <div
              class="content-info" 
              v-html="caseDetail.introduction"
            ></div> 
          </div>
        </div> 
      </div>

css代码 注意要给父盒子设置overflow 菜单栏设置固定定位 一定要加一定要加一定要加overflow

  .case-infos {
    min-height: 500px;
    overflow-y: auto;
    max-height: 800px;
    position: relative;
      .tabs {
	      position: fixed;
	      right: calc(50% - 573px);
	      top: 320px;
	   }
      .case-content {
          position: relative;
      }
  }

js代码

data(){
	return{
		tabsList: [],
      	activeIndex: 0,
      	contentLocation: [],
	}
}

created(){
	// 调接口 获取页面内容   
	// 例如
	this.getCourseCasesDetail()
},

  mounted() {
    // 监听滚动事件
    this.$nextTick(function () {
      this.addScrollFun()
    })
  },
  methods: { 
     // 左侧link点击右侧内容滑动
    toContent(item, index) {
      this.$nextTick(() => {
        this.removeScrollFun()
        this.activeIndex = index
        document.querySelector('#content').scroll({
          top: document.querySelector(`#content-item${index}`).offsetTop,
          // behavior: 'smooth',
          behavior: 'auto',
        })
        this.addScrollFun()
      })
    },

    addScrollFun() {
      document
        .querySelector('#content')
        .addEventListener('scroll', this.listenScroll)
    },

    removeScrollFun() {
      document
        .querySelector('#content')
        .removeEventListener('scroll', this.listenScroll)
    },

    // 内容部分滚动事件
    listenScroll(e) {
      this.contentLocation.forEach((el, index) => {
        // 当前滚动高度大于等于link高度 (这个34是我菜单栏每个的高度  可以根据自己的实际情况设置)
        if (e.target.scrollTop >= el - 34) {
          this.activeIndex = index
        }
      })
    },

    // 在获取页面内容之后调用这个方法 内容部分标题相对于顶部的位置--用来左右滚动联动
    handleLocation() {
      this.contentLocation = []
      if (Array.isArray(this.tabsList)) {
        this.tabsList.forEach((ele, index) => {
          this.contentLocation.push(
            document.querySelector(`#content-item${index}`).offsetTop
          )
        })
      } 
    },

    getCourseCasesDetail() {
      this.$api.getCourseCasesDetail({
        casesId: this.$route.query.id,
      })
        .then((response) => { 
          this.caseDetail = response.data
          this.$nextTick(() => {
          	// 在获取页面内容之后调用这个方法
            this.handleLocation() // 获取link位置
          })
        })
        .catch((error) => {
          console.log('getCourseCasesDetail error: ', error)
        })
    },
  }

代码部大概就是这么多。但是还有个小问题就是最后一个内容如果太少,会有点不对劲,待解决,或者下次找更好的办法

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:16:14  更:2022-04-01 23:19:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:08:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码