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.
参数:
- 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”。
实际在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'
})
})总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Vue 使用高德地图添加点标记 + 点击地图获取坐标 + 带搜索(即地
这篇文章主要介绍了Vue 使用高德地图添加点标记 + 点击地图获取坐标 + 带搜索(即地理编码 + 逆地理编码) 附完整示例,本文结合示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧2024-01-01
@vue/cli4.x版本的vue.config.js常用配置方式
这篇文章主要介绍了@vue/cli4.x版本的vue.config.js常用配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-05-05


最新评论