uni-app 实现吸顶加侧滑的效果

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

uni-app 实现吸顶加侧滑的效果

如图所示的效果。

2 回复

https://ext.dcloud.net.cn/plugin?id=715
如果你需要吸顶后,可继续左右拖动长列表,那请参考hello uni-app模板里的swiper-list,从HBuilderX2.6.6+起新建项目选择的hello uni-app模板带有该功能,是nvue实现的。


在uni-app中实现吸顶(Sticky Header)加侧滑(Swipe Menu)的效果,可以通过结合scroll-view组件和一些自定义样式及事件处理来实现。以下是一个简单的代码示例,展示了如何实现这两个功能。

1. 吸顶效果(Sticky Header)

首先,通过CSS设置header的吸顶样式。

<template>
  <view class="container">
    <view class="header" :class="{ 'sticky': isSticky }">
      <text>Sticky Header</text>
    </view>
    <scroll-view scroll-y="true" @scroll="handleScroll">
      <view class="content">
        <!-- 内容区域 -->
        <view v-for="i in 50" :key="i" class="item">Item {{ i }}</view>
      </view>
    </scroll-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isSticky: false,
      scrollTop: 0,
      headerHeight: 0,
    };
  },
  mounted() {
    this.headerHeight = this.$refs.header.offsetHeight;
  },
  methods: {
    handleScroll(e) {
      this.scrollTop = e.detail.scrollTop;
      this.isSticky = this.scrollTop > this.headerHeight;
    },
  },
};
</script>

<style>
.container {
  padding-top: 60px; /* 预留header空间 */
}
.header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 60px;
  background-color: #fff;
  z-index: 1000;
  transition: top 0.3s;
}
.header.sticky {
  top: 0;
}
.content {
  padding-top: 60px; /* 防止内容被header遮挡 */
}
.item {
  height: 50px;
  border-bottom: 1px solid #ccc;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

2. 侧滑效果(Swipe Menu)

侧滑效果可以通过自定义组件或使用第三方库实现。这里提供一个简单的自定义侧滑菜单示例。

<!-- 侧滑菜单项 -->
<template>
  <view class="swipe-item" @touchstart="startTouch" @touchmove="moveTouch" @touchend="endTouch">
    <view class="menu" v-if="showMenu" :style="{ transform: `translateX(${menuTranslate}px)` }">
      <button @click="handleAction('Delete')">Delete</button>
      <button @click="handleAction('Edit')">Edit</button>
    </view>
    <view class="content">
      <slot></slot>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      startX: 0,
      translateX: 0,
      showMenu: false,
      menuWidth: 150, // 菜单宽度
    };
  },
  methods: {
    // 省略了touch事件处理函数和handleAction函数...
  },
};
</script>

<style>
/* 样式部分省略,需定义.swipe-item, .menu, .content等样式 */
</style>

注意:侧滑菜单的实现涉及复杂的触摸事件处理,包括触摸开始、移动和结束事件,以及相应的样式变化。为了简洁,这里省略了具体实现细节,但上述结构提供了一个基础框架,你可以在此基础上进一步开发和优化。

回到顶部