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知识库 -> js锚点跳转添加过度动画,vue锚点跳转js添加平滑过度效果 -> 正文阅读

[JavaScript知识库]js锚点跳转添加过度动画,vue锚点跳转js添加平滑过度效果

这里声明一下,a标签锚点跳转和本文跳转不冲突,如果不需要平滑效果,只需要点击跳转锚点连接看此文;:vue实现锚点定位跳转,a标签实现锚点定位跳转
先看看最终效果图:

js锚点跳转添加过度动画,id锚点跳转js添加平滑过度效果

接下来看代码:我的导航栏是动态的,内容列表也是循环出来的,其实道理都一样,基本原理就是找到跳转目标元素距离顶部的距离(document.getElementById(‘#type’)).offsetTop),然后获取当前距离顶部距离(document.documentElement.scrollTop),然后用js进行上下滑动操作,接下来看代码,为了看了简介,我删掉了不相关代码:

HTML

<!-- 右侧悬浮导航栏 -->
        <div>
          <div v-for="(item, indext) in fixList" :key="indext">
            <div
              @click="tapItem(indext)"
            >
              {{ item.name}}
            </div>
          </div>
          <div>顶部</div>
        </div>
        
        <!-- 商品分组显示页,也就是跳转的目标页 -->
        <div
          v-for="(item, index) in fixList"
          :key="index"
          :name="'type-' + index"
          :id="'type-' + index"
        >
        	内容区域,视频中的商品列表区....
        </div>

JS

tapItem(index) {
      // 点击单个分类,跳转到相应的锚点连接,并添加过度动画平滑效果
      this.activeBtn = index;
      // 需要跳转的目标锚点所在高度,因为定位不准确,应该是以底部为跳转距离了,我这里添加了一个屏幕高度,跳转位置刚好正确,根据项目自己修改
      let jumpHeight = (document.getElementById('type-' + index)).offsetTop + (document.documentElement.clientHeight - 90); 
      // 当前位置距离顶部的高度
      let top = document.documentElement.scrollTop
      if(jumpHeight > top) { 
        // 目标高度大于当前高度,说明需要往下滑
        let heigth = jumpHeight - top;
        if (this.myTimer == -1) { // 这个是一个定时器,用来防止重复点击的
          //滑动高度大于10000,在0.8秒内完成平移动画,80可以自己根据实际情况来改就是0.8秒
        if (heigth > 10000) {
          let num = Number((heigth / 80).toFixed(0));
          this.myTimer = setInterval(() => {
            top += num;
            if (top >= jumpHeight) {
              top = jumpHeight;
              window.clearInterval(this.myTimer);
              this.myTimer = -1;
            }
            window.scrollTo(0, top);
          }, 10);
        } else {
          // 滑动距离小于10000,按默认速度滑动
          this.myTimer = setInterval(() => {
            top += 80;
            if (top >= jumpHeight) {
              top = jumpHeight;
              window.clearInterval(this.myTimer);
              this.myTimer = -1;
            }
            window.scrollTo(0, top);
          }, 10);
        }
      }
      }else { // 目标高度小于当前高度,说明需要往上滑
        let heigth = top - jumpHeight;
        if (this.myTimer == -1) {
        if (heigth > 10000) {
          let num = Number((heigth / 80).toFixed(0));
          this.myTimer = setInterval(() => {
            top  -= num;
            if (top <= jumpHeight) {
              top = jumpHeight;
              window.clearInterval(this.myTimer);
              this.myTimer = -1;
            }
            window.scrollTo(0, top);
          }, 10);
        } else {
          this.myTimer = setInterval(() => {
            top -= 80;
            if (top <= jumpHeight) {
              top = jumpHeight;
              window.clearInterval(this.myTimer);
              this.myTimer = -1;
            }
            window.scrollTo(0, top);
          }, 10);
        }
      }
      }
    },

学废了点个赞呗!
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:32:01  更:2022-05-18 17:35:05 
 
开发: 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/23 20:17:02-

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