uni-app swiper组件实现吸顶并支持刷新功能

发布于 1周前 作者 caililin 来自 Uni-App

uni-app swiper组件实现吸顶并支持刷新功能

不是官方demo 有很大问题。1.不支持刷新和加载 2.切换的时候不能保持吸顶 即一个tab 没有滑动 另一个滑动了很多。切到第一个tab 瞬间回去 很不好

在大多数app 中 两个tab页可互相切换 并拥有自己的刷新和加载 且可以上滑吸顶。这已十分常见 可是uniapp 确实无法达到

我用过以下方法
1 判断是否吸顶 禁止scroll-view 上拉和下拉,到达位置后允许上拉。 但是 必须松手在滑一次才好使
2将刷新组件套在外层。共用一个 刷新加载。但是切换swiper会共享一个滚动条
3 靠scroll-view 产生的值 使外部盒子上移 但是单个tab可以。两个就产生两个滚动值了 无法续上了

唉 是在没办法了


17 回复

最近也在做这个效果,没想到看似简单,实则无从下手啊


嗯 我能想到只有上面的方法了,兄弟要是有思路给我说一下哈,降级实现确实效果不好

https://ext.dcloud.net.cn/plugin?id=4472
这个 QS-UI 插件可以试试, 里面 uni_modules > components > QS-Uni-Swiper-list 是这个大佬 使用官方的模板修改的,在这个基础上添加了刷新和加载,现在只是一个案例,可以参考一下,只支持 nvue 。 h5 就不知道该怎么办了。我想先试着用这个改一个nvue的出来,至于h5就暂时只能判断编译,然后再使用其他效果了

好的 谢谢我也去试试 感谢

兄弟,他这个组件在哪里用了啊 我咋找不到啊

回复 giao233: 这个组件还没用上,只能看看代码了

回复 giao233: 但是只兼容app,难受了

回复 3***@qq.com: 卧槽 app 就行,但是我怎么run 他兄弟

这个很简单做。。。。。 最简单的便是多个图层 动态设置css透明度

怎么搞 怎么搞 可以具体说一下吗 ?大哥

回复 giao233: 不考虑性能最简单的做法是获取scroll-view值,然后判断值后动态设置样式z-index,rbg,scroll-view内先放个view占个位置,当scroll page > 10 z-index = 2 rbf(,0.5) 接着 scroll page > 20 大于view占位高度 rbg(1)即可

另外需要一些好看的效果,直接干个css动画也不费事,多to几个条件

还是怕别人说我只会BBBBBBB不停,花十几分钟做个demo出个视频吧,免得被唧唧歪歪 https://vkceyugu.cdn.bspapp.com/VKCEYUGU-0b841909-6dad-46f7-be07-2453c39d2b8f/13a599c4-4a52-4384-860d-a15039544f9d.mp4 具体思路是这样,看你自己怎么做了

至于加载数据,都已经获得位置了,想懒加载,还是什么乱七八糟的玩法不都在里面判断就完事了么

回复 luodada: 十分感谢大哥的用心的回答,但是好像是我表达错误。我录个视频你可以看一下链接 (软件是即刻) :https://pan.baidu.com/s/1_7eYtAYwn2hyCAdWKpvTOQ 提取码:6666 复制这段内容后打开百度网盘手机App,操作更方便哦

回复 giao233: 看了你的,这个效果其实就是我说的思路在改变一下就行, 顶部内容 swiper[ scroll-view 1 scroll-view 2 scroll-view 3 ] 每个scroll-view对位置进行判断就行

在uni-app中实现swiper组件吸顶并支持刷新功能,可以通过使用CSS和JavaScript结合的方式来实现。以下是一个简单的代码示例,展示如何实现这一需求。

1. 页面布局

首先,在你的页面中定义一个swiper组件,并设置其样式以实现吸顶效果。同时,为了支持刷新功能,你可以使用一个按钮来模拟刷新操作。

<template>
  <view>
    <!-- 吸顶swiper -->
    <swiper class="swiper-container" :autoplay="false" :interval="3000" :duration="500">
      <swiper-item v-for="(item, index) in swiperList" :key="index">
        <view class="swiper-item">{{ item }}</view>
      </swiper-item>
    </swiper>

    <!-- 刷新按钮 -->
    <button @click="refreshSwiper">刷新</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      swiperList: ['幻灯片1', '幻灯片2', '幻灯片3']
    };
  },
  methods: {
    refreshSwiper() {
      // 模拟刷新数据,这里可以替换为实际的API请求
      this.swiperList = ['新幻灯片1', '新幻灯片2', '新幻灯片3'];
      // 重置swiper到第一个幻灯片(可选)
      this.$refs.swiper.swiperTo(0, 500, false);
    }
  }
};
</script>

<style scoped>
.swiper-container {
  position: sticky;
  top: 0;
  width: 100%;
  height: 200px; /* 根据需要调整高度 */
}

.swiper-item {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  background-color: #f0f0f0;
  font-size: 20px;
}
</style>

2. 关键点说明

  • swiper组件:使用uni-app的swiper组件来展示轮播图。
  • 吸顶效果:通过CSS的position: sticky; top: 0;属性来实现swiper组件的吸顶效果。
  • 刷新功能:在方法中定义一个refreshSwiper函数,该函数可以模拟数据的刷新,并重置swiper到第一个幻灯片(可选)。
  • swiperTo方法:使用swiper组件的swiperTo方法来实现重置swiper到第一个幻灯片的功能。注意,这里需要给swiper组件添加ref属性以便在JavaScript中引用。

3. 注意事项

  • 确保swiper组件的父容器有足够的空间来展示swiper组件。
  • 根据实际需要调整swiper组件的高度和样式。
  • 在实际项目中,refreshSwiper方法中的数据刷新部分应替换为实际的API请求逻辑。

通过以上代码示例,你可以在uni-app中实现一个吸顶的swiper组件,并支持通过按钮点击来刷新swiper的内容。

回到顶部