zoukankan      html  css  js  c++  java
  • better-scroll不生效原因

      在vue项目中运用better-scroll插件进行上拉加载的功能时,页面拉不动。

      html结构:

    <div class="wrapper" ref="wrapper">
            <ul class="now-film content">
                <li class="now-film-item" v-for="(item, index) in now" @click="handleClick()">
                    <div class="now-film-item-img">
                        <img :src="item.poster.origin" alt="">
                    </div>
                    <div class="now-film-item-tips">
                        <div class="now-film-item-tips-top">
                            <span>{{item.name}}</span>
                            <span>{{item.grade}}</span>
                        </div>
                        <p class="now-film-item-tips-center">{{item.intro}}</p>
                        <div class="now-film-item-tips-bottom">
                            <span>{{item.cinemaCount}}家影院上映</span>&nbsp;&nbsp;
                            <span>{{item.watchCount}}人购票</span>
                        </div>
                    </div>
                </li>
            </ul>
        </div>

      html结构没问题

    先看下浏览器滚动条生效的原理:

      浏览器的滚动原理: 浏览器的滚动条大家都会遇到,当页面内容的高度超过视口高度的时候,会出现纵向滚动条;当页面内容的宽度超过视口宽度的时候,会出现横向滚动条。也就是当我们的视口展示不下内容的时候,会通过滚动条的方式让用户滚动屏幕看到剩余的内容

    失效原因:

      其实better-scroll文档已经说得很清楚了:当 content 的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器(wrapper)的高度,我们就可以滚动内容区了

      当把BScroll打印出来发现hasVerticalScroll属性为false,则一定是wrapper和content计算高度时出错了。此时,对比下scrollerHeight和wrapperHeight,多半是前者小于等于后者。然后,手动修改hasVerticalScroll为true,会发现可以拖拽,但不是滚动。这是因为scrollerHeight计算错误。

      高度计算出错多半是因为dom没更新完就初始化BS。(BS必须在dom完成之后被初始化),但我这里的问题出在wrapper的高度等于content的高度,所以就不能滚动了

      

      

      #app的height为100%

      .header-wrapper高度固定

      我当时.wrapper的高度也是100%,由于100%是相对于父元素的高度,但此时父元素.movie并没有设置高度,所以父元素的高度等于子元素撑开的高度,由于.movie-tab也是固定高度,所以.wrapper的高度等于父元素的高度减去.movie-tab的高度,也就等于ul的高度,所以better-scroll不生效。

    解决方案:

      将.wrapper的父元素.movie的高度也设为100%,此时.movie的高度就等于#app的高度减去.header-wrapper的高度(页面的剩余高度),那么.wrapper的高度也就等于页面上可视的wrapper高度,高度就固定了

    反思:

      1、html和css基础不够扎实,百分比理解不够透彻

      2、解决该问题花了很长时间,其实发现还是自己百度或谷歌解决最快

    延伸:

      1、屏蔽滚动条的方法:出现滚动条是因为内容去大于包裹区,所以给包裹区加个overflow:hidden就行了

      2、better-scroll插件的使用

        (1)npm install better-scroll --save

        (2)import BScroll from 'better-scroll'

        (3)

    mounted() {
            //第一个参数是滚动元素的外盒子 第二个参数是配置项
            this.scroll = new BScroll(this.$refs.wrapper,{
                click:true,
                pullUpLoad:true
            })
    
            //当用户上拉时触发的事件
            this.scroll.on("pullingUp",()=>{
               this.handleNow_getNowMovie(++this.pageNum)
            })
        },
        updated () {
            //重新计算高度
            this.scroll.refresh();
            //当数据加载完毕以后通知better-scroll
            this.scroll.finishPullUp();
        }

    (4)

    const actions = {
        handleNow({commit}, params) {
            if (params < 7) {
                axios({
                    method: 'get',
                    url: '/v4/api/film/now-playing?page=' + params + '&count=7',
                }).then((res) => {
                    commit('handleNow', res.data.data.films);
                    console.log(res);
                });
            }
            
        }
    }

    (5)

    const mutations = {
        handleNow(state, params) {
        //防止后面的数据覆盖前面的数据 state.now
    = [...state.now, ...params]; console.log(state.now); } }

      

  • 相关阅读:
    SICP 习题1.16-1.19体会
    设计模式C++实现——组合模式
    QT官方下载地址
    浅析三角形測试程序
    操作系统开发之——进入保护模式
    PowerDesigner 打印错误
    @RequestParam注解一般用法
    Eclipse配置Maven的一些问题
    在windows上部署使用redis出现的问题及解决方法
    Eclipse导入模板格式Xml配置文件
  • 原文地址:https://www.cnblogs.com/ruoshuisanqian/p/9954158.html
Copyright © 2011-2022 走看看