vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue遇到scrollIntoView无效

vue中遇到scrollIntoView无效问题及解决

作者:°折月煮酒

这篇文章主要介绍了vue中遇到scrollIntoView无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue中遇到scrollIntoView无效

官方文档写的简单

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

语法:

element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop);// Boolean型参数
element.scrollIntoView(scrollIntoViewOptions);// Object型参数

首先容器滚动,然后document.geyElementById或者document.querySelector 获取指定元素,最够元素调用scrollIntoView.

参数:

一个Boolean值:

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

如果为false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的scrollIntoViewOptions: {block: "end", inline: "nearest"}。

一个包含下列属性的对象:

定义动画过渡效果, "auto"或 "smooth"之一。默认为"auto"。

定义垂直方向的对齐,"start","center","end", 或 "nearest"之一。默认为 “start”。

定义水平方向的对齐, "start", "center","end", 或 "nearest"之一。默认为 “nearest”。

实际在vue项目中遇到,当通过点击事件调用子组件的元素滚动到可视区域时怎样都无效。

最终发现,这个方法还有一个限制:需要页面完全加载后再调用

这样,在vue中可以使用$nextTick函数,确保页面已渲染完成在去调scrollIntoView使滚动到可视区域

实现代码如下

父组件:

showDatePicker(){
  if (this.$refs.pickers) {
        this.$nextTick(() => {
          this.$refs.pickers.showCurrentDate()
        })
      }

子组件:

  showCurrentDate() {
      this.$el.querySelector('.active').scrollIntoView({
        block: 'start',
      }) // 回到顶部
    },

scrollIntoView在vue里失效---kalrry

Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。

element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); // Boolean型参数
element.scrollIntoView(scrollIntoViewOptions); // Object型参数

参数 

alignToTop: 一个boolean值
//true:等价于 scrollIntoViewOptions: {block: “start”, inline: “nearest”}
//false:等价于scrollIntoViewOptions: {block: “end”, inline: “nearest”}
scrollIntoViewOptions: 对象
behavior: 定义动画过度效果, ‘auto / smooth' , 默认 ‘auto'
block:定义垂直方向的对齐, “start / center / end / nearest”。默认为 “start”。
inline 定义水平方向的对齐, “start / center / end / nearest”。默认为 “nearest”

问题

按照js标准选择元素方式,scrollIntoView在vue里失效

原因

该方法需在页面完全加载后才能生效

解决

方法一:

利用setTimeout方法

    setTimeout(function(){
        document.getElementById(target).scrollIntoView();
     },100)

方法二:

运用vue中的this.$nextTick方法

    this.$nextTick(()=>{
    //对象方式设置滚动状态
       document.querySelector("#01commonly").scrollIntoView({
          block: 'end',
          behavior: 'smooth'
        })
    })

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文