iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现锚点跳转之scrollIntoView()方法详解
  • 390
分享到

vue实现锚点跳转之scrollIntoView()方法详解

2024-04-02 19:04:59 390人浏览 薄情痞子
摘要

目录Vue锚点跳转scrollIntoView()方法滚动到某个特定元素 一个简单的vue锚点跳转demovue锚点跳转scrollIntoView()方法 滚动到某个特定

vue锚点跳转scrollIntoView()方法

滚动到某个特定元素 

scrollIntoView();这个方法不用获取右边小标题的高度,啥都不用,有id或者class就行啦,几乎可以满足你锚点跳转的所有需求,对齐方式,以及平滑滚动了

这里是v-for循环出来需要点击跳转到对应div的事件

<p> v-for="(value,index) in data" @click="scrollToPosition(index)">{{...}}</p>  

这就是你点击scrollToPosition事件需要滚动对应的div

<div> v-for="(value,index) in data" class="roll">{{...}}</div>  

js部分

methods:{
  scrollToPosition(index){
     document.getElementsByClassName('roll')[index].scrollIntoView()
}

这样就利用scrollIntoView()简单实现了一个锚点跳转,下边来看一个scrollIntoView中的一些属性

  • scrollIntoView(true)相等于scrollIntoView();元素的顶端将和其所在滚动区的可视区域的顶端对齐

为true时相应的 scrollIntoViewOptions: {block: “start”, inline: “nearest”}。这是这个参数的默认值。

  • scrollIntoView(false)元素的底端将和其所在滚动区的可视区域的底端对齐

为false时相应的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。

同时他的参数也可以是一个object对象

  scrollIntoView({
  behavior:auto //定义动画过渡效果"auto"或 "smooth" 之一。默认为 "auto"。
  block:start//定义垂直方向的对齐, "start", "center", "end", 或 "nearest"之一。默认为 "start"。
  inline:nearest//"start", "center", "end", 或 "nearest"之一。默认为 "nearest"。
  })

其中smooth是平滑滚动 start和end是目标滚动到的位置

注意:

兼容性的问题多数主流浏览器已经支持其基本功能,也就是说,使用true,false两个参数,来实现木讷的定位(没有滚动动画)是没有任何问题的,但是传入object参数时,就不得不说一句,IE各种版本会直接忽略,全部看成true参数属性,如果想看到滚动动画,就只有火狐和chrome 

一个简单的vue锚点跳转demo

拿去直接粘贴就可

<template>
  <div class="auto-adjust-edit" >
    <!-- 按钮 -->
    <div class="operation-btn">
        <div class="btn-item" v-for="(item, index) in partList" :key="index" @click="jump(index)"
            :style="{background: activeStep === index ? '#eeeeee' : '#ffffff'}">{{item}}
        </div>
    </div>
    <!-- 滚动区域 -->
    <div class="scroll-content" @scroll="onScroll">
      <div class="scroll-item">
          <div class="part-title">基本信息</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">风险控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">成本控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">量级控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">新计划管理</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">老计划管理</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">垃圾计划清理</div>
      </div>
    </div>
    
  </div>
</template>
<script>
export default {
    data() {
        return {
            activeStep: 0,
            partList: ['基本信息', '风险控制', '成本控制', '量级控制', '新计划管理', '老计划管理', '垃圾计划清理']
        }
    },
    methods: {
        // 滚动触发按钮高亮
        onScroll (e) {
            let scrollItems = document.querySelectorAll('.scroll-item')
            for (let i = scrollItems.length - 1; i >= 0; i--) {
                // 判断滚动条滚动距离是否大于当前滚动项可滚动距离
                let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop - 100;
                if (judge) {
                    this.activeStep = i
                    break
                }
            }
        },
        // 点击切换锚点
        jump (index) {
            let target = document.querySelector('.scroll-content')
            let scrollItems = document.querySelectorAll('.scroll-item')
            // 判断滚动条是否滚动到底部
            if (target.scrollHeight <= target.scrollTop + target.clientHeight) {
                this.activeStep = index
            }
            let total = scrollItems[index].offsetTop - scrollItems[0].offsetTop // 锚点元素距离其offsetParent(这里是body)顶部的距离(待滚动的距离)
            let distance = document.querySelector('.scroll-content').scrollTop // 滚动条距离滚动区域顶部的距离
            // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // 滚动条距离滚动区域顶部的距离(滚动区域为窗口)
            // 滚动动画实现, 使用setTimeout的递归实现平滑滚动,将距离细分为50小段,10ms滚动一次
            // 计算每一小段的距离
            let step = total / 50
            if (total > distance) {
                smoothDown(document.querySelector('.scroll-content'))
            } else {
                let newTotal = distance - total
                step = newTotal / 50
                smoothUp(document.querySelector('.scroll-content'))
            }
            // 参数element为滚动区域
            function smoothDown (element) {
                if (distance < total) {
                    distance += step
                    element.scrollTop = distance
                    setTimeout(smoothDown.bind(this, element), 1)
                } else {
                    element.scrollTop = total
                }
            }
            // 参数element为滚动区域
            function smoothUp (element) {
                if (distance > total) {
                    distance -= step
                    element.scrollTop = distance
                    setTimeout(smoothUp.bind(this, element), 1)
                } else {
                    element.scrollTop = total
                }
            }
            // document.querySelectorAll('.scroll-item').forEach((item, index1) => {
            //   if (index === index1) {
            //     item.scrollIntoView({
            //       block: 'start',
            //       behavior: 'smooth'
            //     })
            //   }
            // })
        }
    }
}
</script>
<style lang="sCSS" scoped>
  .auto-adjust-edit {
    flex-basis: 100%;
    display: flex;
    overflow: hidden;
    height: 500px;
    height: 100%;
    // 侧边栏
    .operation-btn {
        width: 9.5%;
        height: 95%;
        margin-right: 0.5%;
        padding-top: 1%;
        margin-top: 4px;
        background: white;
        border: 1px solid rgb(190, 188, 188);
        border-radius: 6px;
        box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.2);
        .btn-item {
            height: 40px;
            line-height: 40px;
            padding-left: 20px;
            cursor: pointer;
        }
    }
    // 表单内容
    .scroll-content {
        height: 100%;
        width: 90%;
        overflow: auto;
        .scroll-item {
            background: white;
            border-radius: 8px;
            margin-bottom: 6px;
            border: 1px solid rgb(216, 214, 214);
            min-height: 300px;
            // 标题
            .part-title {
                height: 40px;
                line-height: 40px;
                font-weight: 600;
                padding-left: 10px;
            }
            // 表单
            /deep/.el-fORM {
                border: 1px solid rgb(190, 189, 189);
                width: 98%;
                margin: 10px auto 30px;
                border-radius: 6px;
                /deep/.el-form-item {
                margin-bottom: 12px;
                margin-top: 10px;
                }
            }
        }
    }
  }
</style>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue实现锚点跳转之scrollIntoView()方法详解

本文链接: https://www.lsjlt.com/news/167729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现锚点跳转之scrollIntoView()方法详解
    目录vue锚点跳转scrollIntoView()方法滚动到某个特定元素 一个简单的vue锚点跳转demovue锚点跳转scrollIntoView()方法 滚动到某个特定...
    99+
    2024-04-02
  • vue实现锚点跳转及滚动监听的方法
    vue中实现锚点跳转以及滚动监听跳转到相应标签的方法,供大家参考,具体内容如下 *注意·如果scroll-item的最后一个元素高度必须大于等于滚动区域的高度,不然最后...
    99+
    2024-04-02
  • Vue项目中实现描点跳转scrollIntoView的案例
    目录Vue实现描点跳转scrollIntoView方式一:使用a标签#id形式方式二:scrollIntoView使用vue遇到scrollIntoView无效问题官方文档写的简单V...
    99+
    2024-04-02
  • 小程序-uni-app:实现锚点连接/锚点跳转(uni.pageScrollTo、scroll-into-view)
    Uniapp支持锚点连接,可以通过以下步骤实现锚点连接 一、在需要设置锚点的页面,为需要跳转的部分设置id属性。 例如,设置一个id为“section1”的元素: 这是需要跳转到的部分 二、在需要跳转到锚点的页面,使用uni.navigat...
    99+
    2023-10-10
    小程序 uni-app
  • vue实现锚点定位功能的方法
    这篇文章主要讲解了“vue实现锚点定位功能的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue实现锚点定位功能的方法”吧!本文实例为大家分享了vue实现锚点定位的具体代码,供大家参考,...
    99+
    2023-06-20
  • vue+element ui实现锚点定位的方法
    本篇内容主要讲解“vue+element ui实现锚点定位的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue+element ui实现锚点定位的方法”吧!本文实例为大家分享了vue + ...
    99+
    2023-06-20
  • 纯CSS实现网页内部锚点跳转时上下偏移的方法
    这篇文章给大家分享的是有关纯CSS实现网页内部锚点跳转时上下偏移的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在做我的“足球导航”网站的时候遇到一个网页内部锚点跳转后向下偏移一点,以避免被顶部固定导航栏...
    99+
    2023-06-08
  • PHP实现301跳转的方法详解
    PHP实现301跳转的方法详解 在网站开发过程中,经常会遇到需要实现301跳转的情况。301跳转是指永久重定向,它告诉搜索引擎该网页已经永久移动到新的URL上,对搜索引擎优化(SEO)...
    99+
    2024-04-02
  • Golang 网页跳转实现方法详解
    Golang(也称为Go)是一种快速、高效、并发性强的编程语言,因其强大的并发支持和简洁的语法而备受开发者青睐。本文将重点探讨在Golang中实现网页跳转的方法,并提供具体的代码示例。...
    99+
    2024-03-05
    方法 golang 网页跳转
  • Vue实现带参跳转的方法
    这篇文章主要介绍了Vue实现带参跳转的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主页面:name —> shishengzuotanhuichaxun此页面表格...
    99+
    2023-06-14
  • vue中实现网页跳转方法
    在Vue应用中,实现网页跳转的方法有很多种。下面就分别介绍几种常用的方法。使用vue-routervue-router是Vue官方推出的前端路由插件,可以帮助我们更方便地管理应用程序的路由。可以通过在路由配置中添加对应的路径和组件,来实现页...
    99+
    2023-05-24
  • vue如何通过点击事件实现页面跳转详解
    目录前言this.$router.push()this.$router.push()中的参数规则参数的接收注意补充:VUE实现从一个页面跳转到另一个页面的指定位置总结前言 页面跳转,...
    99+
    2024-04-02
  • PHPCMS中实现跳转至详情页的方法详解
    实现跳转至详情页,是网页开发中常见且重要的功能。在使用PHPCMS这一优秀的内容管理系统时,如何实现跳转至详情页就成为了开发者们关注的一个重要问题。本文将详细介绍在PHPCMS中实现跳...
    99+
    2024-04-02
  • vue项目实现页面跳转的方法
    目录1.创建一个vue-cli默认项目(仅包含babel)2.进入创建文件3.检查配置4.创建views文件夹5.设置APP.vue6.进行main.js的配置7.运行结果问题描述:...
    99+
    2024-04-02
  • web开发中页面内锚点定位及跳转方法有哪些
    这篇文章将为大家详细讲解有关web开发中页面内锚点定位及跳转方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最简单的方法是锚点用<a>标签,在href...
    99+
    2024-04-02
  • php实现跳转的方法
    本文将为大家详细介绍“php实现跳转的方法”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php实现跳转的方法”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。php有什...
    99+
    2023-06-06
  • React实现锚点跳转组件附带吸顶效果的示例代码
    React实现锚点跳转组件附带吸顶效果 import React, { useRef, useState, useEffect } from 'react'; import styl...
    99+
    2023-01-05
    React锚点跳转组件 React吸顶效果 React吸顶
  • 详解Android Activity之间跳转出现短暂黑屏的处理方法
    摘要: 如何解决页面之间跳转时的黑屏问题呢?在默认情况下,Android应用程序启动时,会有一个黑屏的时期。原因是,首个activity会加载一些数据,比如初始化列表数据、向服务器发送请求获取数据等等。同样,使用startActivity(...
    99+
    2023-05-31
    activity 跳转 黑屏
  • vue中给el-radio添加tooltip并实现点击跳转方式
    目录给el-radio添加tooltip并实现点击跳转element表格(el-table)自定义复选框(添加提示el-tooltip)需求实现效果总结给el-radio添加tool...
    99+
    2023-05-15
    vue el-radio vue点击跳转 给el-radio添加tooltip
  • KotlinstartActivity跳转Activity实现流程详解
    目录带参数的调整自定义数据传输startActivityForResult小结从一个Activity跳到另一个Activity 在编写安卓代码是最常见的事情了。我们不可能在一个页面中...
    99+
    2022-12-08
    Kotlin startActivity跳转Activity Kotlin startActivity跳转
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作