scrollIntoView的基本定义、以及Vue3、vue2中使用: 点击导航滚动到对应区域。

news2024/12/23 11:42:03

1. 基本定义

MDN 关于scorllIntoView的介绍

Element 接口的 scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

  1. scrollIntoView()
  2. scrollIntoView(alignToTop)
  3. scrollIntoView(scrollIntoViewOptions)

1. alignToTop 可选

alignToTop可选
一个布尔值
如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的 scrollIntoViewOptions: {block: "start", inline: "nearest"}。这是这个参数的默认值。
如果为 false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的 scrollIntoViewOptions: {block: "end", inline: "nearest"}

2. scrollIntoViewOptions 可选

一个包含下列属性的对象:
behavior 可选
定义动画过渡效果,auto 或 smooth 之一。默认为 auto
block 可选
定义垂直方向的对齐,start、center、end 或 nearest 之一。默认为 start
inline 可选
定义水平方向的对齐,start、center、end 或 nearest 之一。默认为 nearest

例子

const element = document.getElementById("box");

element.scrollIntoView();
element.scrollIntoView(false);
element.scrollIntoView({ block: "end" });
element.scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" });

在这里插入图片描述

2. 使用

常用到的点击顶部导航滚动到对应的区域。
在这里插入图片描述

  1. 使用的时候外层元素不要使用margin-top、否则整个区域都会向上滚动。可以使用padding代替。
  2. 内容区域设置固定高度。height: 400px;overflow-y: scroll;
<template>
  <div class="index-page">
    <scroll-intoview></scroll-intoview>
  </div>
</template>

<script setup>
import scrollIntoview from '@/components/common/scrollIntoview.vue'
</script>

2.1. vue3

scrollIntoview.vue

<template>
  <div class="scroll-into-view-page">
    <div class="tab-nav-list">
      <div class="list-item btn-active" :class="tabActive === index ? 'act':''" v-for="(item, index) in tabList"
           @click="changeTab(item,index)">{{ item.title }}
      </div>
    </div>
    <div class="tab-content">
      <div class="item" :ref="el=>tabListRef[index] = el" v-for="(item, index) in tabList">{{ item.title }}</div>
    </div>
  </div>
</template>

<script setup>
import {reactive, ref} from "vue"

const tabList = reactive([
  {title: '科学'},
  {title: '地理'},
  {title: '英语'},
  {title: '数学'}
])
const tabActive = ref(0)
const tabListRef = ref([])

const changeTab = (item, index) => {
  if(tabActive.value === index) return
  tabActive.value = index
  tabListRef.value[index].scrollIntoView({behavior: 'smooth', block: 'start'})
}
</script>
<style lang="less" scoped>
.scroll-into-view-page {
  font-size: 12px;
  color: #1D2129;
  z-index: 2;
  background: #f7f7f8;
  //margin-top: 20px;

  .tab-nav-list {
    border-radius: 4px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 16px;
    height: 32px;
    background: #3d4f5b;
    font-size: 14px;

    .list-item {
      color: #8592A6;
      padding: 2px 6px;
      border-radius: 2px;

      &.act {
        transition: all ease .3s;
        color: #FFFFFF;
        background: #b7b3b4;
        font-weight: bold;
      }
    }
  }

  .tab-content {
    padding: 0 16px;
    margin-top: 16px;
    font-size: 20px;
    height: 400px;
    overflow-y: scroll;

    .item {
      margin-bottom: 10px;

      &:first-child {
        height: 300px;
        background: #568686;
      }

      &:nth-child(2) {
        height: 130px;
        background: #807536;
      }

      &:nth-child(3) {
        height: 300px;
        background: olivedrab;
      }

      &:last-child {
        height: 200px;
        background: #477070;
      }
    }

  }
}
</style>

2.2. vue2

vue2中使用、主要就是获取dom元素方法改变下即可

 <div class="item" v-for="(item, index) in tabList">{{ item.title }}</div>
<script>
export default {
  data() {
    return {
      tabList: [
         {title: '科学'},
         {title: '地理'},
         {title: '英语'},
         {title: '数学'}],
      tabActive: 0,
      tabListRef: []
    }
  },
  mounted() {
    this.getDomElements()
  },
  methods: {
    getDomElements() {
      this.$nextTick(()=> {
        let el = document.getElementsByClassName('tab-content')[0]
        this.tabListRef = el.children
      })
    },
    changeTab(item, index) {
      if(this.tabActive === index) return
      this.tabActive = index
      this.tabListRef[index].scrollIntoView({behavior: 'smooth', block: 'start'})
    }
  }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aws Automation

In order to save money, CloudFormation terminates the resources from the template Systems Manager will handle on-premises and EC2 instance patches Caching Amazon CloudFront 是一种内容分发网络 (CDN) 服务&#xff0c;旨在获得优异性能、安全性和开发人员便利性…

A股市场上股票行情数据接口有那几种?

L2行情数据接口相比Level-1接口相比&#xff0c;L2行情市场具有数据更完整、推送速度更及时的优势&#xff0c;帮助投资者及时把握盘中主要资金流&#xff0c;做出更准确的投资决策。简而言之&#xff0c;Level-2最大的作用就是提前看到主力的大单&#xff0c;对于追逐日线跌停…

js解析jwt中的数据,将base64转为json方式,以及需要注意的地方

jwt前端解析 ​当我们做前后端分离项目时&#xff0c;需要将jwt保存在前端&#xff0c;有时候需要将jwt中的数据解析出来&#xff0c;网上有很多用第三方组件的方式&#xff0c;但是js的原生方法就也可以解决&#xff0c;虽然存在兼容等问题&#xff0c;但是修改一下也是可用的…

“新白色战场”增长公式发布丨数说故事2023低温鲜奶洞察

重点内容抢先看 低温鲜奶成为乳制品品类新的增长点&#xff0c;头部品牌纷纷入局&#xff0c;“新白色战场”厮杀逐年激烈。 数说故事发布《2023低温鲜奶品类洞察报告》&#xff0c;根据近两年社媒电商数据深度分析&#xff0c;总结出低温鲜奶品类增长公式。 产品力 口感性价…

ElasticSearch 同步MySQL数据方案汇总

叙述 在实际项目开发中&#xff0c;我们经常将Mysql作为业务数据库&#xff0c;ES作为查询数据库&#xff0c;用来实现读写分离&#xff0c;缓解Mysql数据库的查询压力&#xff0c;应对海量数据的复杂查询。这其中有一个很重要的问题&#xff0c;就是如何实现Mysql数据库和ES的…

Matlab如何隐藏坐标轴框线,但保留刻度及刻度标签

假如我们用Matlab绘制了这样一幅堆叠图&#xff1a; 看起来&#xff0c;哪哪都好&#xff0c;但就是感觉两条黑色的坐标轴框线有些碍事。 于是想&#xff0c;该怎么去掉呢&#xff1f; 网上对于这一问题比较常见的解答是&#xff0c;将坐标轴颜色设置为背景颜色&#xff1a; …

2023,没有人不想做黄牛

【潮汐商业评论/原创】 “没办法啊&#xff0c;只能退票了。”作为奶茶十几年的老粉&#xff0c;好不容易从其他粉丝手里买到票的Sarah无奈道。 “刘若英&#xff0c;12小时内退票”、“梁静茹&#xff0c;24小时内退票”…… 近日“演唱会闹退票”登上了热搜。起因是5月7日&…

nuitka打包python的PyQt5成exe可执行文件

使用nuitka打包python的PyQt5 可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载64位 win…

CoolShell 博客备份QA问答

芝兰生于深谷&#xff0c;不以无人而不芳; 君子修身养德&#xff0c;不以穷困而改志 这是左耳朵耗子-陈皓[1]的座右铭&#xff0c;他的中文技术博客酷壳 - CoolShell[2]可能是许多技术人员的圣地&#xff0c;至少对我来说是的。 coolshell_talk 他在极客时间的专栏&#xff0c;…

深度学习--主动学习

主动学习简介 主动学习是指对需要标记的数据进行优先排序的过程&#xff0c;这样可以确定哪些数据对训练监督模型产生最大的影响。主动学习是一种学习算法可以交互式查询用户(teacher 或 oracle)&#xff0c;用真实标签标注新数据点的策略。主动学习的过程也被称为优化实验设计…

Oracle 存储过程语法

Oracle 存储过程语法 1. 创建表&#xff08;测试数据准备&#xff09; -- 创建用户表 create table TT_USER (USERID NUMBER(10),USERNAME VARCHAR2(255),PASSWORD VARCHAR2(255),SEX VARCHAR2(1) );INSERT INTO TT_USER VALUES (101, zhang, 111, 1); INSERT INTO TT…

Win11校园网不弹出登录页面怎么回事?

Win11校园网不弹出登录页面怎么回事&#xff1f;最近有用户在使用校园网的时候遇到了一些问题&#xff0c;访问登录网站的时候&#xff0c;一直无法显示登录的界面。那么遇到这个情况如何去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法如下&#xff1a; 方…

【零基础学机器学习 2】 机器学习的实操步骤-以及在Python中实现机器学习模型

文章目录 1. 收集数据2. 准备数据3. 选择模型4. 训练模型5. 评估模型6. 参数调整7. 进行预测在Python中实现机器学习模型 机器学习是一种人工智能的分支&#xff0c;它使用算法和统计模型来让计算机系统自动地从数据中学习&#xff0c;并根据学习结果做出预测或决策。机器学习的…

智能双向嵌入式UART转CAN模块 串口 RS232 RS485 UART CAN转换器

CANUART-100TL系列智能双向UART转CAN模块具有一路TTL UART串口通道和一路CAN通道&#xff0c;实现CAN与串口 UART之间的双向数据智能转换。超小型灌封模块设计&#xff0c;方便用户集成到电路板上&#xff0c;快速通过MCU的UART口扩展CAN通道。 智能双向UART转CAN模块提供“…

Docker高级:Compose 容器编排

目录 一、Docker Compose 概述二、使用 Docker Compose三、常用命令四、编排微服务Ⅰ、搭建微服务Ⅱ、编写Dockerfile构建镜像Ⅲ、启动容器&#xff0c;测试服务Ⅳ、使用Compose编排容器 五、总结 一、Docker Compose 概述 Compose 是Docker公司推出的一个软件&#xff0c;可以…

跟着我学 AI丨AIGC,自媒体的核武器

自从 ChatGPT 火爆全网之后&#xff0c;AI 相关概念的热度就一直持续高涨不下&#xff0c;尤其是大众都在关注的 AI 的应用场景方向&#xff0c;更是疯狂。无论是 AI 圈内人还是以前对 AI 完全没有认知的人&#xff0c;都想借助 AI 挣上一笔。目前来说最受关注的 AI 应用场景&a…

阿里云数据库ClickHouse产品和技术解读

摘要&#xff1a;社区ClickHouse的单机引擎性能十分惊艳&#xff0c;但是部署运维ClickHouse集群&#xff0c;以及troubleshoot都不是很好上手。本次分享阿里云数据库ClickHouse产品能力和特性&#xff0c;包含同步MySQL库、ODPS库、本地盘及多盘性价比实例以及自建集群上云的迁…

kubernetes中Pod介绍

目录 kubernetes的作用 k8s核心资源pod Pod如何管理多个容器&#xff1f; Pod网络 k8s中容器的共享方式 Pod存储 已经学习了docker为什么还要学习Pod Pod与Docker之间的关系 Pod的优势 收集业务日志 pod工作方式 自主式&#xff08;不推荐&#xff09; yaml文件详解…

内存和闪存介绍

主要分为两类&#xff1a;内存和闪存&#xff0c;内存的数据掉电会丢失&#xff0c;闪存的数据掉电不会丢失。 内存&#xff1a;SRAM、RAM、SDRAM、DDR 闪存&#xff1a;ROM、FLASH、EMMC RAM&#xff1a;Random Access Memory 随机存储器&#xff0c;又分为&#xff1a;SRAM…

科士达为绿色世界 提供多维度低碳新动能

2023年5月11日&#xff0c;“数据中心绿色发展大会”围绕节能降碳绿色赋能主题&#xff0c;在成都如期召开。作为国内数据中心行业的翘楚&#xff0c;科士达应邀参加了大会,与会代表高级售前沈凤文带来了题为《为绿色世界 提供多维度低碳新动能》的精彩演讲。 在“双碳”目标引…