h5列表滚动到指定位置(vue2)

<template>

  <div ref="scrollview" id="inside" @touchend="scrollChange">

    <li v-for="(item, index) in list" :key="index" :class="'js-lipei' + index">

      {{item.title}}

    </li>

  </div>

</template>

<script>
export default {
  data() {
    return {
      list: [
        {title: '----------我是第1 条----------'},
        {title: '----------我是第2 条----------'},
        {title: '----------我是第3 条----------'},
        {title: '----------我是第4 条----------'},
        {title: '----------我是第5 条----------'},
        {title: '----------我是第6 条----------'},
        {title: '----------我是第7 条----------'},
        {title: '----------我是第8 条----------'},
        {title: '----------我是第9 条----------'},
        {title: '----------我是第10条----------'},
        {title: '----------我是第11条----------'},
        {title: '----------我是第12条----------'},
        {title: '----------我是第13条----------'},
        {title: '----------我是第14条----------'},
        {title: '----------我是第15条----------'},
        {title: '----------我是第16条----------'},
        {title: '----------我是第17条----------'},
        {title: '----------我是第18条----------'},
        {title: '----------我是第19条----------'},
        {title: '----------我是第20条----------'},
        {title: '----------我是第21条----------'},
        {title: '----------我是第22条----------'},
        {title: '----------我是第23条----------'},
        {title: '----------我是第24条----------'},
        {title: '----------我是第25条----------'},
        {title: '----------我是第26条----------'},
        {title: '----------我是第27条----------'},
        {title: '----------我是第28条----------'},
        {title: '----------我是第29条----------'},
        {title: '----------我是第30条----------'},
      ],
    };
  },
  mounted() {
    // 监听页面滚动事件
    const sctollview = this.$refs['scrollview'];
    sctollview.addEventListener("scroll", this.scrollChange, true);
    // 滚动条重定向
    this.goScroll();
  },
  methods: {
    scrollChange(e) {
      // 判断是否到了最顶部
      if (e.target.offsetTop <= 0) {
        console.log("滚动到了最顶部")
      }else if(e.target.offsetTop > 0) {
        console.log("正在滚动---------->", e);
      }
      if(e.path[0].className != ''){
        sessionStorage.setItem('scrollTop', e.path[0].className)
      }
    },
    goScroll() {
      if(sessionStorage.getItem('scrollTop') != null){
        document.getElementsByClassName(sessionStorage.getItem('scrollTop'))[0].scrollIntoView({
          block: 'center', //center表示将视口的中间和元素的中间对齐
          behavior: 'instant' // 直接滚到目标
        })
      }
    }
  },
  beforeDestroy() {
    // 销毁监听页面滚动事件
    const sctollview = this.$refs['scrollview'];
    sctollview.removeEventListener("scroll", this.scrollChange, true);
  },
}
</script>

<style>
*{
  margin: 0;
  padding: 0;
  overflow: hidden;
  background: #fff;
}
div{
  width: 100%;
  overflow-Y: auto;
  padding: 0 0 1px 0;
}
li {
  list-style: none;
  background: #fff;
  font-size: 22px;
  height: 100px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
  border-bottom: 1px double #eee;
}
</style>

如果 scrollIntoView undefined的话mounted替换成updated

vue列表滚动

scrollIntoView方法 

behavior
表示滚动方式。auto表示使用当前元素的scroll-behavior样式。instant和smooth表示直接滚到底和使用平滑滚动。

block
表示块级元素排列方向要滚动到的位置。对于默认的writing-mode: horizontal-tb来说,就是竖直方向。start表示将视口的顶部和元素顶部对齐;center表示将视口的中间和元素的中间对齐;end表示将视口的底部和元素底部对齐;nearest表示就近对齐。

inline
表示行内元素排列方向要滚动到的位置。对于默认的writing-mode: horizontal-tb来说,就是水平方向。其值与block类似。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值