plugins/nested-scroll
优质
小牛编辑
129浏览
2023-12-01
介绍
协调嵌套的 BetterScroll 滚动行为。
::: warning 警告 v2.1.0 支持多层嵌套的 BetterScroll,并且功能更强大,性能更好。在这之前,只支持双层嵌套,请尽快升级至 2.1.0 版本。 :::
::: tip 提示 v2.1.0 完美解决多层嵌套 BetterScroll 的 click 事件多次派发的问题。 :::
安装
npm install @better-scroll/nested-scroll --save
// or
yarn add @better-scroll/nested-scroll
使用
你需要首先引入 nested-scroll
插件,并通过全局方法 BScroll.use()
使用
import BScroll from '@better-scroll/core'
import NestedScroll from '@better-scroll/nested-scroll'
BScroll.use(NestedScroll)
上面步骤完成后,BScroll 的 options
中配置 nestedScroll
。
// < v2.1.0
// parent bs
new BScroll('.outerWrapper', {
nestedScroll: true
})
// child bs
new BScroll('.innerWrapper', {
nestedScroll: true
})
// v2.1.0
// parent bs
new BScroll('.outerWrapper', {
nestedScroll: {
groupId: 'dummy-divide' // string or number
}
})
// child bs
new BScroll('.innerWrapper', {
nestedScroll: {
groupId: 'dummy-divide'
}
})
具有相同 groupId
的 BetterScroll 实例(bs)共享同一个 NestedScroll 实例(ns),ns 会协调每个 bs 滚动行为,一旦某个 bs 销毁的时候,ns 都会失去对它的掌控,例如:
// parent bs
const bs1 = new BScroll('.outerWrapper', {
nestedScroll: {
groupId: 'shared' // string or number
}
})
// child bs
const bs2 = new BScroll('.innerWrapper', {
nestedScroll: {
groupId: 'shared'
}
})
console.log(bs1.plugins.nestedScroll === bs2.plugins.nestedScroll) // true
bs2.destroy() // nestedScroll 不再约束 bs2,不再协调 bs1 与 bs2 的滚动行为
示例
竖向双层嵌套
<<< @/examples/vue/components/nested-scroll/vertical.vue?template <<< @/examples/vue/components/nested-scroll/vertical.vue?script <<< @/examples/vue/components/nested-scroll/vertical.vue?style竖向三层嵌套
<<< @/examples/vue/components/nested-scroll/triple-vertical.vue?template <<< @/examples/vue/components/nested-scroll/triple-vertical.vue?script <<< @/examples/vue/components/nested-scroll/triple-vertical.vue?style横向双层嵌套
<<< @/examples/vue/components/nested-scroll/horizontal.vue?template <<< @/examples/vue/components/nested-scroll/horizontal.vue?script <<< @/examples/vue/components/nested-scroll/horizontal.vue?style横向竖向双层嵌套
<<< @/examples/vue/components/nested-scroll/horizontal-in-vertical.vue?template <<< @/examples/vue/components/nested-scroll/horizontal-in-vertical.vue?script <<< @/examples/vue/components/nested-scroll/horizontal-in-vertical.vue?style
实例方法
:::tip 提示 以下方法皆已代理至 BetterScroll 实例,例如:
import BScroll from '@better-scroll/core'
import NestedScroll from '@better-scroll/nested-scroll'
BScroll.use(NestedScroll)
const bs1 = new BScroll('.parent-wrapper', {
nestedScroll: {
groupId: 'dummy'
}
})
const bs2 = new BScroll('.child-wrapper', {
nestedScroll: {
groupId: 'dummy'
}
})
// 销毁 nestedScroll,bs1 与 bs2 共享同一个 nestedScroll 实例,因为他们的 groupId 相同
bs1.purgeNestedScroll() // 与 bs2.purgeNestedScroll() 的效果一样
:::
purgeNestedScroll()
- 介绍:销毁管控自己的 nestedScroll
::: warning 注意 不同的 groupId
会生成不同的 nestedScroll,相同的 groupId
会共享同一份 nestedScroll,因此你应该在合适的时机(比如组件销毁的时候)调用 purgeNestedScroll
来清理内存。或者你也可以调用 BetterScroll 的 destroy 方法把自身从 nestedScroll 移除,例如:
const bs1 = new BScroll('.parent-wrapper', {
nestedScroll: {
groupId: 'dummy'
}
})
const bs2 = new BScroll('.child-wrapper', {
nestedScroll: {
groupId: 'dummy'
}
})
bs1.destroy() // nestedScroll 不再管控 bs1
bs2.destroy() // nestedScroll 不再管控 bs2
:::
静态方法
getAllNestedScrolls()
介绍:获取当前所有的 nestedScroll 实例
返回:nestedScroll 实例组成的数组
import NestedScroll from '@better-scroll/nested-scroll' const nestedScrolls: NestedScroll[] = NestedScroll.getAllNestedScrolls()
purgeAllNestedScrolls()
介绍:销毁当前所有的 nestedScroll 实例
import NestedScroll from '@better-scroll/nested-scroll' // 不再约束任何 BetterScroll 实例 NestedScroll.purgeAllNestedScrolls()