首先安装iscroll
npm install iscroll
创建scroll组件
<template>
<div id="wrapper" ref="wrapper">
<slot></slot>
</div>
</template>
<script>
import IScroll from 'iscroll/build/iscroll-probe' //专业版本可以监听滚动的细节
export default {
name: 'ScrollView',
mounted () {
this.iscroll = new IScroll(this.$refs.wrapper, {
mouseWheel: true,//禁用鼠标滚轮
scrollbars: true, //禁用滚动条
// 解决拖拽卡顿问题
scrollX: false,
scrollY: true, //y方向滚动
disablePointer: true,
disableTouch: false,
disableMouse: true
})
// setTimeout(() => {
// // console.log(this.iscroll.maxScrollY)
// this.iscroll.refresh()
// // console.log(this.iscroll.maxScrollY)
// }, 5000)
// 1.创建一个观察者的对象
/*
MutationObserver构造函数只要监听到了指定内容发生了变化,就会执行传入的回调函数
MutationList: 发生变化的数组
observer:观察者对象
*/
const observer = new MutationObserver((mutationList, observer) => {
// console.log(MutationList)
// console.log(this.iscroll.maxScrollY)
this.iscroll.refresh()
// console.log(this.iscroll.maxScrollY)
})
// 2.告诉观察者对象我们需要观察什么内容
const config = {
childList: true, // 观察目标子节点的变化,是否有添加或者删除
subtree: true, // 观察后代节点,默认为 false
attributeFilter: ['height', 'offsetHeight'] // 观察特定属性
}
// 3.告诉观察者对象,我们需要观察谁,需要观察什么内容
/*
第一个参数: 告诉观察者对象我们需要观察谁
第二个参数: 告诉观察者对象我们需要观察什么内容
*/
observer.observe(this.$refs.wrapper, config)
}
}
</script>
<style scoped>
#wrapper{
width: 100%; //容器的宽高等于可视区域的宽高
height: 100%;
}
</style>
要注意把系统默认滚动关闭
html, body{
width: 100%;
height: 100%;
overflow: hidden;
// 解决IScroll拖拽卡顿问题
touch-action: none;
}
并且iscroll容器的高度必须小于内容的高度
容器的宽高等于可视区域的宽高
要给容器设置一个宽高,可以固定定位
.recommend{
position: fixed;
top: 184px;
left: 0;
right: 0;
bottom: 0;
}
MutationObserver()
创建并返回一个新的 MutationObserver 它会在指定的DOM发生变化时被调用。
// 1.创建一个观察者的对象
/*
MutationObserver构造函数只要监听到了指定内容发生了变化,就会执行传入的回调函数
MutationList: 发生变化的数组
observer:观察者对象
*/
const observer = new MutationObserver((mutationList, observer) => {
// console.log(MutationList)
// console.log(this.iscroll.maxScrollY)
this.iscroll.refresh()
// console.log(this.iscroll.maxScrollY)
})
// 2.告诉观察者对象我们需要观察什么内容
const config = {
childList: true, // 观察目标子节点的变化,是否有添加或者删除
subtree: true, // 观察后代节点,默认为 false
attributeFilter: ['height', 'offsetHeight'] // 观察特定属性
}
// 3.告诉观察者对象,我们需要观察谁,需要观察什么内容
/*
第一个参数: 告诉观察者对象我们需要观察谁
第二个参数: 告诉观察者对象我们需要观察什么内容
*/
observer.observe(this.$refs.wrapper, config)
引用:
哎呀,看到博主更新一篇真难啊
呜呜呜,会慢慢开始更新的
哈哈哈哈 才看博客说怎么这么久没更新 刷新一下就逮到了
哈哈缘分 会一直更新的啦~