vue中记录滚动条位置

1、方法一

在点击的时候记录滚动条位置,存入本地
再次进入该路由读取滚动跳位置

1、1 跳转时路由存入scroll

  • 如果要有多个页面,可以把名称也存进去,这里默认一个页面
    methods: {
      go() {
        console.log(document.documentElement.scrollTop)
        localStorage.setItem("scroll", document.documentElement.scrollTop)
        this.$router.push({path: '/'})
      }
    }
复制代码

1、2 读取scroll位置

  • 再次进入该路由时从本地录取scroll位置

利用scrollBehavior ,在router/index.js中,配置路由中的scrollBehaviors事件

const router = new VueRouter({
  mode: 'hash',
  routes,
  scrollBehavior(to, from){
    if(to.name==='fatherSlot'){ //name为路由名字
      return {x:0, y: parseInt(localStorage.getItem('scroll'))}//读取本地的scroll
    }
    console.log("to",to,"from",from)
  }
})
复制代码

2、方法二

利用vuekeep-alive , 使用缓存机制来记录滚动条位置
但是有个缺点,页面刷新后就不记录了,但是简单高效

2、1 配置需要缓存的路由

  • 缓存pageA,pageB,里面代码都一样,如演示图一样。pageA,pageC为组件的名字.

html

    <keep-alive :include="['pageA','pageC']">
      <router-view/>
    </keep-alive>
复制代码

2、2 在路由内记录滚动位置

javascript

    data() {
      return {
        curScrollTop: 0 //记录滚动条位置对象
      }
    },
    //此钩子函数会反复触发,是keep-alive特有的钩子函数,取
    activated() {
      document.documentElement.scrollTop = this.curScrollTop || 0
    },
    //路由离开时的钩子函数,存
    beforeRouteLeave (to, from, next) {
      this.curScrollTop = document.documentElement.scrollTop || 0
      next()
    },

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
对于Vue拖拽排序以及在滚动条内排序时自动滚动的问题,可以使用以下步骤: 1. 引入sortable.js库,它提供了拖拽排序的功能。 2. 使用Vue的v-for指令渲染列表,并且添加ref属性以便后续访问。 3. 使用sortable.js提供的sortable()方法初始化拖拽排序。 4. 监听sortable.js提供的sort事件,将列表排序后的数据更新到Vue的data。 5. 监听sortable.js提供的start事件,记录当前拖拽的元素的位置,以便后续自动滚动。 6. 监听sortable.js提供的move事件,判断是否需要自动滚动,并且计算滚动的距离。 7. 在需要自动滚动的情况下,使用Vue的$refs访问滚动条元素,并且使用scrollTo()方法进行滚动。 下面是一个示例代码: ``` <template> <div class="sortable-list" ref="list"> <div v-for="(item, index) in items" :key="item.id" class="sortable-item">{{ item.name }}</div> </div> </template> <script> import Sortable from 'sortablejs'; export default { data() { return { items: [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' }, { id: 4, name: 'Item 4' }, { id: 5, name: 'Item 5' }, { id: 6, name: 'Item 6' }, { id: 7, name: 'Item 7' }, { id: 8, name: 'Item 8' }, { id: 9, name: 'Item 9' }, { id: 10, name: 'Item 10' } ], draggingIndex: null, draggingTop: null, draggingBottom: null }; }, mounted() { const list = this.$refs.list; Sortable.create(list, { onSort: () => { const items = []; list.childNodes.forEach((node, index) => { items.push({ id: node.dataset.id, name: node.textContent.trim() }); }); this.items = items; }, onStart: (evt) => { this.draggingIndex = evt.oldIndex; this.draggingTop = evt.item.offsetTop; this.draggingBottom = evt.item.offsetTop + evt.item.offsetHeight; }, onMove: (evt) => { const scrollTop = list.scrollTop; const scrollHeight = list.scrollHeight; const clientHeight = list.clientHeight; const delta = 10; if (evt.clientY - list.offsetTop < scrollTop + delta) { list.scrollTop -= delta; } else if (evt.clientY - list.offsetTop > scrollTop + clientHeight - delta) { list.scrollTop += delta; } } }); } }; </script> <style> .sortable-list { height: 200px; overflow-y: auto; } .sortable-item { padding: 10px; margin-bottom: 5px; background-color: #f0f0f0; cursor: move; } </style> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲码的老余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值