vue如何移动到指定位置(scrollIntoView)亲测避坑
作者:换日线°
这篇文章主要介绍了vue如何移动到指定位置(scrollIntoView)亲测避坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue移动到指定位置(scrollIntoView)
用(scrollIntoView)来实现移动到指定位置建议不要放在(mt-loadmore)里使用,不然头部会被挤上去----亲测
- html
<div id="pronbit" ref="pronbit">需要移动到的位置</div>
- js
//选中id
document.getElementById(e).scrollIntoView({
behavior: "smooth", // 平滑过渡
block: "start" // 上边框与视窗顶部平齐。默认值
});
// 选中ref
this.$refs.pronbit.scrollIntoView({
behavior: "smooth", // 平滑过渡
block: "start" // 上边框与视窗顶部平齐。默认值
});
//要是放在mounted()里执行使用
this.$refs.pronbit.scrollIntoView();//不然只执行一次刷新了也一样
//禁止scrollIntoView
this.$refs.pronbit.scrollIntoView(false);上面介绍使用方法 下面请看效果图

<template>
<div id="app">
<!-- 轮播 -->
<div class="planting">
<cube-slide ref="slide" :data="items" @change="changePage">
<cube-slide-item v-for="(item, index) in items" :key="index" @click.native="clickHandler(item, index)">
<img @click="imgus('aa'+index)" :src="item.image">
</cube-slide-item>
</cube-slide>
</div>
<!-- 轮播 -->
<img style="width: 100%;float: left;" v-for="(item,index) in items" :id="'aa'+index" :src="item.image">
<img style="width: 100%;float: left;" v-for="(item,index) in 3" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1076778629,484203681&fm=11&gp=0.jpg">
</div>
</template>
<script>
import { getHomeData } from "@/api/public";
import dialog from "@/utils/dialog";//弹窗
export default {
props: {
msg: String
},
data() {
return {
items: [
{
url: '',
image: 'http://img3.imgtn.bdimg.com/it/u=1960330002,2943700579&fm=26&gp=0.jpg'
},
{
url: '',
image: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=225193914,751284870&fm=26&gp=0.jpg'
},
{
url: '',
image: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3019995954,636527762&fm=26&gp=0.jpg'
}
],
}
},
mounted(){
},
methods: {
//滚动指定位置
imgus:function(e){
document.getElementById(e).scrollIntoView({
behavior: "smooth", // 平滑过渡
block: "start" // 上边框与视窗顶部平齐。默认值
});
},
// 轮播
changePage(current) {
console.log('当前轮播图序号为:' + current)
},
clickHandler(item, index) {
console.log(item, index)
},
},
}
</script>
<style>
.cube-slide-item img{
width: 100%;
height: 100%;
}
.planting{
width: 100%;
height: 6rem;
overflow: hidden;
}
.cube-slide-dots{
position:absolute;
bottom: 0.3rem;
}
.cube-slide-dots>span{
height: 2px;
}
</style>引入了滴滴组件的可以直接使用(建议参考)
scrollIntoView导致元素偏移问题
element.scrollIntoView()
需要默认为true element.scrollIntoView()等同于element.scrollIntoView(true)
| (默认值) | 描述 |
|---|---|
| true | 元素的顶部将对齐到可滚动祖先的可见区域的顶部 |
| false | 元素的底部将与可滚动祖先的可见区域的底部对齐。 |
但是
scrollIntoView当元素超出可视区域的时候就会出现元素偏移的情况
解决办法有两个
1.修改元素
`height:100%;overflow:auto`
2.
var Id= document.getElementById("###(##代表id)");
Id.parentNode.scrollTop = Id.offsetTop;这样会默认跑到顶端但是会出现一个问题使得元素的一半出不来
3.最好
var Id= document.getElementById("###(##代表id)");
Id.parentNode.scrollTop = Id.offsetTop- Id.offsetHeight;总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
