努力的琦琦 2020-09-29 01:48 采纳率: 100%
浏览 429
已采纳

vue 利用scrollTop 配合 setinterval实现滚动动画过渡时,滚动动画第一次 二次 滚动的数据正常 滚动方向也正常,第三次就开始网上滚然后再往下滚 一直循环。。。。。。救救孩子吧/(ㄒoㄒ)/~~

vue 利用scrollTop 配合 setinterval实现滚动动画过渡时,滚动动画第一次 二次 滚动的数据正常 滚动方向也正常,第三次就开始往上滚然后再往下滚 一直循环了。。。。。。救救孩子吧/(ㄒoㄒ)/~~跪谢各位前辈了
图片说明

图片说明
附加代码:

<template>
  <div>
    <slot>
      <div v-for="(item, index) in alist" :key="index" class="LIST">
        <div class="title" ref="title">{{ item.name }}</div>
        <div>
          <ul>
            <li v-for="(items, index) in item.dlist" :key="index">
              {{ items }}
            </li>
          </ul>
        </div>
      </div>
      <div class="rightbar">
        <ul>
          <li>A</li>
          <li @click="goBar('B')">B</li>
          <li @click="goBar('C')">C</li>
          <li>D</li>
          <li>E</li>
          <li @click="goBar('F')">F</li>
          <li>G</li>
          <li>H</li>
          <li>I</li>
          <li>J</li>
          <li>K</li>
          <li>L</li>
          <li>M</li>
          <li>N</li>
          <li>O</li>
          <li>P</li>
          <li>Q</li>
          <li>R</li>
          <li>S</li>
          <li>T</li>
          <li>U</li>
          <li>V</li>
          <li>W</li>
          <li>X</li>
          <li>Y</li>
          <li>Z</li>
        </ul>
      </div>
    </slot>
  </div>
</template>

<script>
export default {
  props: {
    list: {
      type: Array,
      default: [],
    },
  },
  data() {
    return {
      alist: [
        {
          name: "A",
          dlist: ["A", "A", "A", "A", "A", "A", "A"],
        },
        {
          name: "B",
          dlist: ["B", "B", "B", "B", "B", "B", "B"],
        },
        {
          name: "C",
          dlist: ["C", "C", "C", "C", "C", "C", "C"],
        },
        {
          name: "D",
          dlist: ["D", "D", "D", "D", "D", "D", "D"],
        },
        {
          name: "E",
          dlist: ["E", "E", "E", "E", "E", "E", "E"],
        },
        {
          name: "F",
          dlist: ["F", "F", "F", "F", "F", "F", "F"],
        },
        {
          name: "G",
          dlist: ["G", "G", "G", "G", "G", "G", "G"],
        },
        {
          name: "H",
          dlist: ["H", "H", "H", "H", "H", "H", "H"],
        },
        {
          name: "I",
          dlist: ["I", "I", "I", "I", "I", "I", "I"],
        },
      ],
    };
  },
  mounted() {
    window.addEventListener("scroll", this.scroll);
  },
  methods: {
    //点击右侧字母的方法 
    goBar(value) {
      console.log(value);
      console.log(this.$refs.title);
      var top = "";
            //循环找到对应的div  并赋值给top
      this.$refs.title.map((res) => {
        if (res.innerHTML == value) {
          top = res;
        }
      });
            //设置定时器 定时获取div距离顶部高度  并且 定时滚动
      var time = setInterval(function () {
            //获取当前对应的div距离顶部的距离
        let op = top.getBoundingClientRect().top || 0;
        let sp = Math.floor(-op / 5);
        document.documentElement.scrollTop = Math.floor(op + sp);
        console.log("还需要滚动", Math.floor(op));
        console.log("下次速度", Math.floor(sp));
        console.log("下次滚动距离", Math.floor(op + sp));
        console.log("--------------------------------");
      }, 300);
    },
  },
};
</script>

<style scoped>
.title {
  font-size: 30px;
  font-weight: 800;
  border: 1px solid blue;
  padding: 20px;
}
.LIST li {
  margin-top: 10px;
  padding: 20px;
  border: 1px solid red;
}
.rightbar {
  border: 1px solid red;
  display: inline-block;
  position: fixed;
  top: 2%;
  right: 0;
}
.rightbar li {
  font-weight: 800;
  text-align: center;
  border: 1px solid red;
}
</style>

这个 问题 自己在封装返回顶部时也没有遇到这个问题 唯独写这个时候出现了问题
因为我这个是自己在封装的一个组件所以 代码看起来比较乱

  • 写回答

2条回答 默认 最新

  • 打工很辛苦吧 2020-09-29 09:40
    关注

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于大棚监测的pcb板设计
  • ¥20 sim800c模块 at指令及平台
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计