首页 > 其他分享 >内容区滚动组件封装

内容区滚动组件封装

时间:2022-08-28 22:27:51浏览次数:81  
标签:滚动 观察者 iscroll 内容 组件 封装 观察 true

温馨提示:让iscroll内容滚动,首先iscroll容器的高度,必须小于内容区的高度
没设置内容区的高度就滚动不了了
容器的高等于可视区的高度,可视区就人所看得到的屏幕大小

安装

yarn add iscroll

配置

  • 滚动组件封装
// src/components/ScrollView
<div id="wrapper" ref="wrapper">
  <!-- 插槽 -->
  <slot></slot>
</div>

#wrapper{
  width: 100%;
  height: 100%;
}
  • 初始化
// src/components/ScrollView
  mounted () {
    this.iscroll = new IScroll(this.$refs.wrapper, {
      mouseWheel: true, // 禁用鼠标滚轮
      scrollbars: false, // 禁用滚轮条
      probeType: 3,
      // 解决拖拽卡顿问题
      scrollX: false,
      scrollY: true,
      disablePointer: true,
      disableTouch: false,
      disableMouse: true
    })
    // 1.创建一个观察者对象
    /*
    MutationObserver构造函数只要监听到了指定内容发生了变化, 就会执行传入的回调函数
    mutationList: 发生变化的数组
    observer: 观察者对象
    * */
    let observer = new MutationObserver((mutationList, observer) => {
      // console.log(mutationList)
      // console.log(this.iscroll.maxScrollY)
      this.iscroll.refresh()
      // console.log(this.iscroll.maxScrollY)
    })
    // 2.告诉观察者对象我们需要观察什么内容
    let config = {
      childList: true, // 观察目标子节点的变化,添加或者删除
      subtree: true, // 默认为 false,设置为 true 可以观察后代节点
      attributeFilter: ['height', 'offsetHeight'] // 观察特定属性
    }
    // 3.告诉观察者对象, 我们需要观察谁, 需要观察什么内容
    /*
    第一个参数: 告诉观察者对象我们需要观察谁
    第二个参数: 告诉观察者对象我们需要观察什么内容
    * */
    observer.observe(this.$refs.wrapper, config)
  },
  methods: {
    // 提供一个监听滚动距离的方法给外界使用
    scrolling (fn) {
      this.iscroll.on('scroll', function () {
        fn(this.y)
      })
    },
    refresh () {
      setTimeout(() => {
        this.iscroll.refresh()
      }, 100)
    },
    scrollTo (x, y, time) {
      this.iscroll.scrollTo(x, y, time)
    }
  }
}

组件中使用

// src/app
<div id='app'>
    <ScrollView>
        <div>这里就是写内容部分啦!</div>
    </ScrollView>
</div>

样式的设置

html,
body {
    width: 100%;
    height: 100%;
    overflow: hidden;
    // 解决IScroll拖拽卡顿问题
    touch-action: none;
}

/* 可视区 */
#app{
  position: fixed;
  top: 184px;
  left: 0;
  right: 0;
  bottom: 0;
}

标签:滚动,观察者,iscroll,内容,组件,封装,观察,true
From: https://www.cnblogs.com/tsalita/p/16633850.html

相关文章

  • umijs如何使用封装好的Lottie动画
    lottie:设计师制作动画,并提供json文件。前端可以使用对应的api操作时间流,对动画进行一些事件上的操作。官网文档: https://github.com/airbnb/lottie-web一.下载依赖 n......
  • 在 React 中释放 Web 组件的力量
    在React中释放Web组件的力量Photoby法提赫on不飞溅假设您有一个项目,要求您在React应用程序中使用Web组件。你如何使用该组件的状态?如何访问它的方法和属......
  • Java封装正则表达式工具类
    Java与正则表达式Java中封装了关于正则表达式的内容,但是并不够彻底(抑或是我理解不够彻底),方便起见,在此编写一个小工具类:publicstaticArrayList<ArrayList<String>>......
  • react组件三大核心属性之一refs
    -ref让react更容易获取dom,和id比较像。只要在dom上定义ref属性,就可以在组件实例的this.refs中获取到对应的dom元素。字符串形式的refs<!DOCTYPEhtml><htmllang="en"......
  • 监听表格内的滚动条, 触底加载数据
    场景:表格内的数据太多,导致页面太卡,所以初始化先展示100条数据,然后滚动在添加数据mounted(){this.$nextTick(()=>{letdom=this.$refs.logTable.bodyWrapperdom.add......
  • CSS 设置滚动条样式 ::-webkit-scrollbar
    ::-webkit-scrollbar仅仅在支持WebKit的浏览器(例如,谷歌Chrome,苹果Safari)可以使用.::-webkit-scrollbar—整个滚动条.::-webkit-scrollbar-button—滚动条上......
  • Django入门到放弃之forms组件
    1.介绍1注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)2前端校验可以没有,后端校验是必须的,使用传统方式if判断写的很多3借助于forms组件,可以快速实现字......
  • 多路由复用页面组件问题
    本文围绕VueRouter中路由组件复用问题展开场景复现项目中经常会遇到增改查的需求,通常采用不同的路由指向同一个页面组件,以此到达复用页面的功能,但是复用页面存在一......
  • 在使用element plus中select组件 关于下拉框位置偏移的解决方法
    造成原因:缩放屏幕时,下拉框会随着屏幕的缩放而偏移解决办法:el-select标签中使用popper-class设置teleported=“false”,再去修改你的样式到正确的位置上<el-select......
  • ElasticSearch高级用法之滚动查询
    由于es的限制,普通查询最多查询10000条数据,那么需要查询数据量大的情况怎么办呢?这个时候就可以使用滚动查询。代码如下://设置查询超时时间Scrollscroll=newS......