Vue中scrollIntoView()方法详解与实际运用举例

 更新时间:2023年12月20日 10:31:41   作者:老电影故事  
这篇文章主要给大家介绍了关于Vue中scrollIntoView()方法详解与实际运用举例的相关资料,该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域,需要的朋友可以参考下

前言

因为工作中用到了锚点设置,滚动定位到列表的某一行,常用的总是出问题,后来扒拉出了这个属性,详细研究了下方便 日 后使用

一、介绍scrollIntoView()的详细属性

1、简介

该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。

  • 根据其他元素的布局,元素可能无法完全滚动到顶部或底部。
  • 页面(容器)可滚动时才有用!

2、语法

element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); //布尔参数
element.scrollIntoView(scrollIntoViewOptions); //对象参数

3、语法参数

align To Top[可选],目前之前这个参数得到了良好的支持
true元素的顶部将对齐到可滚动祖先的可见区域的顶部。对应于scrollIntoViewOptions: {block: “start”, inline: “nearest”}。这是默认值
false元素的底部将与可滚动祖先的可见区域的底部对齐。对应于scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
scrollIntoViewOptions[可选],目前这个参数浏览器对它的支持并不好,可以查看下文兼容性详情
behavior[可选]定义过渡动画。“auto”,“instant"或"smooth”。默认为"auto"。
block[可选] “start”,“center”,“end"或"nearest”。默认为"center"。
inline[可选] “start”,“center”,“end"或"nearest”。默认为"nearest"。

4、示例

var element = document.getElementById("box");
 
element.scrollIntoView();
element.scrollIntoView(false);
element.scrollIntoView({block: "end"});
element.scrollIntoView({behavior: "instant", block: "end", inline: "nearest"});

5、应用场景

URL中hash标记的进化

  • 聊天窗口滚动显示最新的消息

  • 往一个列表添加item后滚动显示最新的添加的item

  • 回到顶部(#)

  • 滚动到指定位置(#xxx)

6、浏览器兼容性

二、实际运用

如图所示一个类似微信一样的electron项目,这个是消息列表,然后有消息过来的时候,就是右下角托盘消息提醒的时候,点击消息提示中的某一项,然后就打开这个页面,定位到选中的某一个,再右边显示详细信息

先说下具体思路:在Vue 3中,可以使用v-for指令的ref属性来绑定每个列表项的引用。然后,使用computed属性来获取要滚动到的元素,并使用scrollIntoView方法将其滚动到可见区域。

以下是在Vue 3中使用v-for和computed实现根据列表的索引定位到某一行的示例:

<template>
  <div>
    <div v-for="(item, index) in list" :key="index" :ref="'listItem-' + index">{{ item }}</div>
  </div>
</template>

<script>
import { computed, ref } from 'vue';

export default {
  setup() {
    const list = ref(['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']);
    const activeIndex = ref(null);

    // 计算要滚动到的元素
    const activeElement = computed(() => {
      if (activeIndex.value !== null) {
        return document.querySelector(`[ref="listItem-${activeIndex.value}"]`);
      }
      return null;
    });

    // 滚动到指定的列表项
    const scrollToIndex = (index) => {
      activeIndex.value = index;
      if (activeElement.value) {
        activeElement.value.scrollIntoView();
      }
    };

    return {
      list,
      scrollToIndex
    };
  }
};
</script>

在上面的代码中,使用v-for指令循环遍历列表,并将每个列表项的引用绑定到ref属性上。然后,使用computed属性来计算要滚动到的元素。在scrollToIndex方法中,使用activeIndex来存储要滚动到的元素的索引,并使用activeElement计算出要滚动到的元素。最后,使用scrollIntoView方法将该元素滚动到可见区域。

在组件中触发scrollToIndex方法,可以在需要滚动到指定列表项时调用该方法。例如,可以在按钮的点击事件处理程序中调用scrollToIndex方法:

<button @click="scrollToIndex(3)">Scroll to Index 3</button>

在上面的代码中,单击按钮将调用scrollToIndex方法,并将3作为参数传递给该方法,以滚动到索引为3的列表项。

再看下我具体写的:

watch(clickId, async() => {
  // console.log('clickId changed from', oldValue, 'to', newValue)
  // eslint-disable-next-line
  const data = await window.app.windowGetData(store.userBaseInfo.username + '.data.warn')
  let code = 0
  const index = data.findIndex((item:any) => (
    item.configId === clickId.value
  ))
  data.forEach((item:any) => {
    if (item.configId === clickId.value) {
      code = Number(item.code)
    }
  })
  if (index !== -1) {
    itemClick(index, code)
    scrollToIndex() // 点击托盘消息的时候触发这里
  }
})
// 计算要滚动到的元素
const activeElement = computed(() => {
  if (activeIndex.value) {
    return document.getElementById(`listItem-${ activeIndex.value }`)
  }
  return null
})
// 滚动到指定的列表项
const scrollToIndex = () => {
  if (activeElement.value) {
    activeElement.value.scrollIntoView(false)
  }
}

完事!

总结

到此这篇关于Vue中scrollIntoView()方法详解与实际运用的文章就介绍到这了,更多相关Vue scrollIntoView()方法详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决在vue项目中webpack打包后字体不生效的问题

    解决在vue项目中webpack打包后字体不生效的问题

    今天小编就为大家分享一篇解决在vue项目中webpack打包后字体不生效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 关于element中对el-input 自定义验证规则

    关于element中对el-input 自定义验证规则

    这篇文章主要介绍了关于element中对el-input 自定义验证规则,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue中的路由传值与重调本路由改变参数

    vue中的路由传值与重调本路由改变参数

    这篇文章主要介绍了vue中的路由传值与重调本路由改变参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue2 webpack proxy与nginx配置方式

    vue2 webpack proxy与nginx配置方式

    这篇文章主要介绍了vue2 webpack proxy与nginx配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 详解Vite如何处理CSS预处理器

    详解Vite如何处理CSS预处理器

    在现代前端开发中,CSS 预处理器如 Sass、Less 和 Stylus 等工具,为样式编写提供了更强大的功能和更好的开发体验,本文将探讨 Vite 是如何处理 CSS 预处理器的,以及如何在实际项目中配置和使用它们,需要的朋友可以参考下
    2025-02-02
  • vue Cli 环境删除与重装教程 - 版本文档

    vue Cli 环境删除与重装教程 - 版本文档

    这篇文章主要介绍了vue Cli 环境删除与重装教程 - 版本文档,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue实现excel表格的导入导出的示例

    vue实现excel表格的导入导出的示例

    本文主要介绍了vue实现excel表格的导入导出的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏

    如何利用Vue3管理系统实现动态路由和动态侧边菜单栏

    通常我们在vue项目中都是前端配置好路由的,但在一些项目中我们可能会遇到权限控制,这样我们就涉及到动态路由的设置了,下面这篇文章主要给大家介绍了关于如何利用Vue3管理系统实现动态路由和动态侧边菜单栏的相关资料,需要的朋友可以参考下
    2022-02-02
  • mpvue写一个CPASS小程序的示例

    mpvue写一个CPASS小程序的示例

    这篇文章主要介绍了mpvue写一个CPASS小程序的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue组件上使用v-model之单选框

    Vue组件上使用v-model之单选框

    这篇文章主要介绍了Vue组件上使用v-model之单选框,代码分为子组件内容和父组件内容,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10

最新评论