实现一个返回顶部的按钮功能(基于better-scroll实现)

better-scroll:是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。

gitHub地址:https://github.com/ustbhuangyi/better-scroll

中文文档:https://better-scroll.github.io/docs/zh-CN/

在vue项目中使用,最好的引入方法是通过npm安装,然后在进行使用。

npm install @better-scroll/core --save

注意,在使用时,要有一个wrapper容器,wrapper容器里面包裹着content容器,滚动的内容是content里面的内容。

实现一个返回顶部的按钮功能

1.首先写一个backTop组件(backTop.vue)

<template>
  <div class="back-top">
      <img src="~assets/img/common/top.png" alt="">
  </div>
</template>

<script>
    export default {
        name:'BackTop',
    }
</script>

<style>
    .back-top{
        position: fixed;
        right: 8px;
        bottom: 55px;
    }
    .back-top img{
        width: 43px;
        height: 43px;
    }
</style>

2.由于better-scroll插件可能之后会被遗弃或者作者不在更新维护,所以将better-scroll封装成一个组件,better-scroll.vue

<template>
  <div class="wrapper" ref='wrapper'>
    <div>
        <slot></slot>
    </div>
  </div>
</template>

<script>
import BScroll from '@better-scroll/core'
export default {
name:'Scroll',
props:{
    probeType:{
        type:Number,
        default:0
    },
     pullUpLoad:{
        type:Boolean,
        default:true
    }
},
data(){
    return {
        scroll:null
    }
},
mounted(){
    this.scroll = new BScroll(this.$refs.wrapper,{
        click:true,
        probeType:this.probeType,
        scrollY: true,
        observeImage:true
    })
    // 监听滚动的位置
    this.scroll.on('scroll',(position) => {
        // console.log(position);
        this.$emit('scroll',position)
    })
    }
}
</script>

<style>

</style>

3.完成需要使用backTop组件的页面

<template>
  <div>
    <nav-bar>
      <div slot="left"><</div>
      <div slot="center">分类</div>
      <div slot="right">更多</div>
    </nav-bar>
    <scroll class="content" ref='scroll' :probe-type='3'  @scroll='contentScroll'>
     <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
      <li>7</li>
      <li>8</li>
      <li>9</li>
      <li>10</li>
      <li>11</li>
      <li>12</li>
      <li>13</li>
      <li>14</li>
      <li>15</li>
      <li>16</li>
      <li>17</li>
      <li>18</li>
      <li>19</li>
      <li>20</li>
      <li>21</li>
      <li>22</li>
      <li>23</li>
      <li>24</li>
      <li>25</li>
      <li>26</li>
      <li>27</li>
      <li>28</li>
      <li>29</li>
      <li>30</li>
      <li>31</li>
      <li>32</li>
      <li>33</li>
      <li>34</li>
      <li>35</li>
      <li>36</li>
      <li>37</li>
      <li>38</li>
      <li>39</li>
      <li>40</li>
      <li>41</li>
      <li>42</li>
      <li>43</li>
      <li>44</li>
      <li>45</li>
      <li>46</li>
      <li>47</li>
      <li>48</li>
      <li>49</li>
      <li>50</li>
      <li>51</li>
      <li>52</li>
      <li>53</li>
      <li>54</li>
      <li>55</li>
      <li>56</li>
      <li>57</li>
      <li>58</li>
      <li>59</li>
      <li>60</li>
      <li>61</li>
      <li>62</li>
      <li>63</li>
      <li>64</li>
      <li>65</li>
      <li>66</li>
      <li>67</li>
      <li>68</li>
      <li>69</li>
      <li>70</li>
      <li>71</li>
      <li>72</li>
      <li>73</li>
      <li>74</li>
      <li>75</li>
      <li>76</li>
      <li>77</li>
      <li>78</li>
      <li>79</li>
      <li>80</li>
      <li>81</li>
      <li>82</li>
      <li>83</li>
      <li>84</li>
      <li>85</li>
      <li>86</li>
      <li>87</li>
      <li>88</li>
      <li>89</li>
      <li>90</li>
      <li>91</li>
      <li>92</li>
      <li>93</li>
      <li>94</li>
      <li>95</li>
      <li>96</li>
      <li>97</li>
      <li>98</li>
      <li>99</li>
      <li>100</li>
    </ul>
    </scroll>
    <back-top v-show='isShow' class="back-top" @click.native='backClick'></back-top>

  </div>
</template>

<script>
import NavBar from 'components/common/navbar/NavBar'
import Scroll from 'components/common/scroll/Scroll'
import BackTop from 'components/content/backtop/BackTop'
export default {
  name:'Category',
  data(){
    return {
      isShow:false
    }
  },
  components:{
    NavBar,
    Scroll,
    BackTop
  },
  methods:{
    backClick(){
      console.log(this.$refs.scroll.scroll);
      this.$refs.scroll.scroll.scrollTo(0,0,500)
    },
    contentScroll(position){
      this.isShow = -position.y > 500
    },
  }
}
</script>

<style>
.content{
  height: 450px;
  background-color: aqua;
  overflow: hidden;
}
</style>

效果图

初始状态

页面滑动到高度300以上,出现回到顶部的按钮

点击按钮,页面内容即可回到顶部位置。

 

 

better-scroll插件是一个很不错的插件,可以实现很多与页面滚动有关的功能,比如上拉加载更多,移动端页面优雅的滚动等功能,可以阅读官网学习更多关于better-scroll的使用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果将 `overflow` 设置为 `auto`,可能会导致 Element UI 中的 `backtop` 功能失效。这是因为 `overflow: auto` 的定义是如果内容溢出了元素框,则在元素内显示滚动条以查看内容。因此,如果您将 `overflow` 设置为 `auto`,则无法使用 `backtop` 功能将页面滚动到顶部。为了解决此问题,您可以尝试将 `overflow` 设置为 `scroll` 或 `hidden`,以查看是否可以正常使用 `backtop` 功能。 ### 回答2: 在Element UI中,backtop组件用于快速回到页面顶部。当设置overflow:auto属性后,元素容器会出现滚动条,即使页面滚动,backtop组件仍然可见且可点击,但点击后无法自动滚动到页面顶部。 这是由于设置overflow:auto属性后,元素容器会成为滚动容器,backtop组件失去自动滚动回到页面顶部功能。 要解决此问题,可以通过以下方法实现backtop组件在设置overflow:auto属性后依然生效: 1. 自定义滚动事件:可以通过监听元素容器的滚动事件,在滚动到一定位置后,通过JavaScript代码修改滚动容器的scrollTop属性将页面滚动到顶部。 2. 使用其他滚动插件:要使backtop组件可以在设置overflow:auto属性后生效,可以考虑使用其他自定义滚动插件,例如BetterScroll、iScroll等。 3. 修改样式:可以对backtop组件进行一些样式上的调整,例如将backtop组件的z-index属性设置为较大的值,使其始终位于顶部,以便用户可以手动点击backtop组件返回顶部。 需要注意的是,以上方法只是一些可能的解决方案,根据具体情况可能需要进行一些适配和调试。如果以上方法仍然无法解决问题,建议查阅Element UI的相关文档或向官方提问以获取更准确的解答。 ### 回答3: 当设置一个元素的`overflow`属性为`auto`时,表示该元素会根据内容自动计算并显示滚动条,只有当内容超出元素的可见区域时才会出现滚动条。 而Element UI中的`Backtop`组件是用来实现返回页面顶部功能的,通常会设置一个目标元素,当滚动到目标元素时显示返回顶部按钮。但是当目标元素的父元素设置了`overflow:auto`时,可能会导致`Backtop`组件不生效的情况。 这是因为当父元素设置了`overflow:auto`时,滚动条是由父元素控制的,而不是网页的整个窗口。因此,即使滚动到目标元素所在的位置,父元素并不会触发滚动事件,导致`Backtop`组件无法捕捉到滚动事件。 解决这个问题的一种方法是将`Backtop`组件的目标元素的父元素设置为`body`元素,而不是设置在一个有`overflow:auto`属性的元素内。这样可以保证`Backtop`组件能够监听到整个网页的滚动事件,并在需要时显示返回顶部按钮。 总之,当设置了`overflow:auto`的元素时,可能会导致Element UI的`Backtop`组件失效。解决方法是将`Backtop`组件的目标元素的父元素设置为`body`元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值