vue中scroll 的使用

       

滚动位置固定:在vue中通过路由切换页面时组件会自动滚动到顶部,需要监听滚动行为才能让滚动位置固定,better-scroll解决了这个问题。

常用效果:移动端很常见的效果,当滑动右边部分的时候,左边会联动显示与当前内容相符合的标题高亮,当点击左边某一个标题的时候,右边会自动滑动到相应的内容。

npm install better-scroll --save

import BScroll from 'better-scroll'

注意使用better-scroll的基本条件

  • 必须包含两个大的div,外层和内层div
  • 外层div设置可视的大小(宽或者高)-有限制宽或高
  • 内层div,包裹整个可以滚动的部分
  • 内层div高度一定大于外层div的宽或高,才能滚动
//创建一个新实例 并且 对class为wrapper对象 实现了一个纵向可点击的滚动效果
let scroll = new BScroll('.wrapper',{
    scrollY: true,
    click: true
})

实现及说明

1.滚动效果

better-scroll在使用的时候需要在dom元素渲染完成之后初始化better-scroll的实例,初始化的时候,先要获取需要滑动的元素,然后在初始化的时候将获取到的元素传递给初始化函数,此时便可实现滑动效果

2.左右联动效果

左右联动效果的实现,是better-scroll通过监听事件实现的。

首先获取到右边内容盒子的高度,然后获取到该盒子中每一项的高度并做前n项高度累加(第n项的高度是前n项的高度和)存储到listHeight数组中。在初始化的时候传递属性probeType=3 (探针的效果,时时获取滚动高度),并给右边的内容盒子对象监听scroll事件,从而时时获取Y轴位置,来与listHeight数组中的数据做比较,时时计算当前的索引值,并给对边对应索引值的项添加背景色高亮,从而实现右边滑动,联动左边。

当点击左边的每一项的时候,获取到当前的索引值,并根据当前的索引值获取到与右边内容盒子中对应索引的元素,右边的盒子元素通过监听scrollToElement,并传递获取到的对应索引元素和动画时间,从而实现点击左边,实现右边联动;

probeType

  • 类型:Number
  • 默认值:0
  • 可选值:1、2、3
  • 作用:有时候我们需要知道滚动的位置。当 probeType 为 1 的时候,会非实时(屏幕滑动超过一定时间后)派发scroll 事件;当 probeType 为 2 的时候,会在屏幕滑动的过程中实时的派发 scroll 事件;当 probeType 为 3 的时候,不仅在屏幕滑动的过程中,而且在 momentum 滚动动画运行过程中实时派发 scroll 事件。

             

<template>

    <div class="scroll" ref='wrapper'>

        <slot></slot>

    </div>

</template>

 

<script>

    import BScroll from 'better-scroll'

    export default {

        name: 'scroll',

        props:{

            //纵向滚动

            scrollY: {

                type: Boolean,

                default: true

            },

            //横向滚动

            scrollX:{

                type: Boolean,

                default: false

            },

            click:{

                type: Boolean,

                default: true

            },

            //探针

            probeType: {

                type: Number,

                default: 0

            }

        },

        

        //挂载后

        mounted(){

            let wrapper = this.$refs.wrapper

            this.scroll = new BScroll(wrapper,{

                scrollX:this.scrollX,

                scrollY:this.scrollY,

                click: this.click,

                probeType: this.probeType

            })

            //console.log('scroll', this.scroll)

        //  //监听滚动事件

            this.scroll.on('scroll',position => {

                //scroll组件不关心你要干嘛,只需要把你想要的信心给你,也就是派发scroll事件,如果你想获取实时的滚动位置你来监听这个事件即可,position就是实时滚动的位置,是个对象,{x: 0 ,y: 0} y是个负值

                this.$emit('scroll',position)

            })

        },

        methods:{

        //  //滚动到指定元素

            scrollToElement(...args) {

                this.scroll && this.scroll.scrollToElement(...args)

    },

        //滚动到相应的位置

           scrollTo(...args){

                  this.scroll&&this.scrollTo(...args)

          },

          //刷新

             refresh(){

                   this.scroll&&this.scroll.refresh()

           },

          //禁用

            disable(){

                  this.scroll&&this.scroll.disable()

           },

              //启用

            enble(){

this.scroll&&this.scroll.enable()

}

         }

    }

</script>

 

<style>

.scroll{ 

    overflow:hidden;

}

</style>

 

在组件中如要用到scroll,就引入.

如: import scroll from '../../base/scroll/scroll'

再在定义:components:{

          srcoll

       }

<scroll>

      <div class= 'bigBox'> 有固定的高度

                   <div class=" box"> box的高度一定要高于外边的父级盒子,才能实现滚动

                   </div>

      </div>

</scroll>

例如:

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-scroll是一个用于Vue.js的无限滚动指令,可以实现页面滚动时自动加载更多内容的功能。以下是使用Vue-scroll的代码示例: 1. 安装vue-scroll 在终端执行以下命令安装vue-scroll: ``` npm install vue-scroll ``` 2. 导入vue-scroll 在需要使用vue-scroll的组件导入vue-scroll: ``` import VueScroll from 'vue-scroll' ``` 3. 注册vue-scrollVue实例使用Vue-scroll: ``` Vue.use(VueScroll) ``` 4. 使用vue-scroll 在需要实现无限滚动的元素上添加v-scroll指令: ``` <div v-scroll="loadMore"></div> ``` loadMore是一个自定义方法,用于加载更多内容。当元素滚动到底部时,vue-scroll会自动调用该方法。 完整示例代码如下: ``` <template> <div v-scroll="loadMore"> <div v-for="item in list" :key="item.id">{{ item.title }}</div> </div> </template> <script> import VueScroll from 'vue-scroll' export default { data() { return { list: [], // 列表数据 page: 1, // 当前页码 pageSize: 10 // 每页数据条数 } }, mounted() { this.loadData() }, methods: { // 加载数据 loadData() { // 发送请求获取数据 axios.get('/api/list', { params: { page: this.page, pageSize: this.pageSize } }).then(response => { this.list = this.list.concat(response.data) this.page++ }) }, // 加载更多 loadMore() { this.loadData() } }, directives: { scroll: VueScroll } } </script> ``` 在这个示例,当页面滚动到底部时,会自动调用loadMore方法加载更多数据。通过这种方式,可以实现无限滚动加载内容的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值