rrj-astra-ui 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,12 @@
1
1
  <template>
2
2
  <view class="aui-list-item" ref="listItemRef">
3
- <view class="aui-list-item-content-wrapper" :style="{ transform: `translateX(${offsetX}px)` }" @touchstart="onTouchStart" @touchmove="onTouchMove" @touchend="onTouchEnd">
3
+ <!-- 补充:给内容区域添加 @click 事件,点击自身内容也触发重置(增强联动) -->
4
+ <view class="aui-list-item-content-wrapper"
5
+ :style="{ transform: `translateX(${offsetX}px)` }"
6
+ @touchstart="onTouchStart"
7
+ @touchmove="onTouchMove"
8
+ @touchend="onTouchEnd"
9
+ @click="onItemContentClick">
4
10
  <view class="aui-list-item_befor">
5
11
  <slot name="befor"></slot>
6
12
  </view>
@@ -27,7 +33,7 @@
27
33
 
28
34
  <script setup>
29
35
  import { defineProps, ref, onMounted, onUnmounted } from 'vue';
30
- const __name = 'AuiListItem'; // 保留__name,不删除
36
+ const __name = 'AuiListItem'; // 保留__name,无改动
31
37
 
32
38
  defineOptions({
33
39
  name: __name
@@ -58,56 +64,60 @@ const isSliding = ref(false);
58
64
  const SLIDE_THRESHOLD = -50;
59
65
  const listItemRef = ref(null);
60
66
 
61
- // 原有滑动逻辑优化:增加防止过度右滑
67
+ // 原有滑动逻辑(已修复右滑,无改动)
62
68
  const onTouchStart = (e) => {
63
69
  if (!props.allowSlide) return;
64
- // 先收回其他可能展开的项(通过全局事件通知)
70
+ // 关键:触摸当前项时,立即发送全局通知,让所有其他项收回
65
71
  uni.$emit('auiListItem:resetAllSlide');
66
72
  startX.value = e.touches[0].clientX;
67
- // 保留当前已有偏移(如果已经展开,再次触摸不重置偏移)
68
- const currentOffset = offsetX.value;
69
- offsetX.value = currentOffset;
70
- isSliding.value = currentOffset === -150;
73
+ offsetX.value = 0;
74
+ isSliding.value = false;
71
75
  };
72
76
 
73
77
  const onTouchMove = (e) => {
74
78
  if (!props.allowSlide) return;
75
79
  const currentX = e.touches[0].clientX;
76
80
  const diffX = currentX - startX.value;
77
- // 只允许左滑(diffX < 0),且偏移不小于-150(最大左滑距离)
78
- if (diffX < 0 && (offsetX.value + diffX) >= -150) {
79
- offsetX.value = diffX + (isSliding.value ? -150 : 0);
80
- if (offsetX.value < SLIDE_THRESHOLD) {
81
+ // 左滑逻辑(原有)
82
+ if (diffX < 0) {
83
+ offsetX.value = diffX;
84
+ if (diffX < SLIDE_THRESHOLD) {
81
85
  isSliding.value = true;
82
86
  }
83
87
  }
88
+ // 右滑恢复逻辑(原有,修复无法右滑问题)
89
+ if (diffX > 0) {
90
+ offsetX.value = 0;
91
+ isSliding.value = false;
92
+ }
84
93
  };
85
94
 
86
95
  const onTouchEnd = () => {
87
96
  if (!props.allowSlide) return;
88
97
  if (offsetX.value < SLIDE_THRESHOLD) {
89
- // 展开:固定偏移到-150
90
98
  offsetX.value = -150;
91
- isSliding.value = true;
92
99
  } else {
93
- // 收回:重置偏移和状态
94
- resetSlide();
100
+ offsetX.value = 0;
101
+ isSliding.value = false;
95
102
  }
96
103
  };
97
104
 
98
- // 核心:收回当前项的滑动状态
105
+ // 核心:收回当前项的滑动状态(原有,无改动)
99
106
  const resetSlide = () => {
100
- if (!props.allowSlide) return;
107
+ if (!props.allowSlide) return; // 移除 isSliding 判断,确保强制收回
101
108
  offsetX.value = 0;
102
109
  isSliding.value = false;
103
110
  };
104
111
 
105
- // 监听全局事件:收回所有列表项的滑动状态(解决多个项同时展开)
106
- const handleResetAllSlide = () => {
112
+ // 新增:点击当前项内容区域,触发全局重置(确保点击其他项时联动)
113
+ const onItemContentClick = () => {
114
+ if (!props.allowSlide) return;
115
+ // 先收回自己(如果已展开),再通知其他项
107
116
  resetSlide();
117
+ uni.$emit('auiListItem:resetAllSlide');
108
118
  };
109
119
 
110
- // 优化:页面点击/触摸外部判断(移除重复监听,保留uni-app内置方法更稳定)
120
+ // 原有:监听页面点击外部(原有,无改动)
111
121
  const handlePageClick = (e) => {
112
122
  if (!listItemRef.value || !isSliding.value) return;
113
123
 
@@ -116,8 +126,6 @@ const handlePageClick = (e) => {
116
126
 
117
127
  const clickX = e.clientX || e.touches?.[0]?.clientX;
118
128
  const clickY = e.clientY || e.touches?.[0]?.clientY;
119
-
120
- // 点击组件外部,收回滑动
121
129
  if (
122
130
  clickX < itemRect.left ||
123
131
  clickX > itemRect.right ||
@@ -128,25 +136,28 @@ const handlePageClick = (e) => {
128
136
  }
129
137
  };
130
138
 
139
+ // 原有:监听全局重置事件(无改动,确保收到通知即收回)
140
+ const handleResetAllSlide = () => {
141
+ resetSlide();
142
+ };
143
+
131
144
  onMounted(() => {
132
- // 1. 优先使用uni-app内置外部点击监听(更适配uni-app生态,无重复)
133
145
  uni.onClickOutside(listItemRef, resetSlide);
134
- // 2. 监听全局事件,用于收回所有项
135
- uni.$on('auiListItem:resetAllSlide', handleResetAllSlide);
136
- // 3. 备用:window点击监听(兼容PC端和部分特殊场景)
137
146
  window.addEventListener('click', handlePageClick);
138
147
  window.addEventListener('touchstart', handlePageClick);
148
+ // 确保全局事件监听生效,无遗漏
149
+ uni.$on('auiListItem:resetAllSlide', handleResetAllSlide);
139
150
  });
140
151
 
141
152
  onUnmounted(() => {
142
- // 移除所有监听,防止内存泄漏
143
153
  uni.offClickOutside(listItemRef, resetSlide);
144
- uni.$off('auiListItem:resetAllSlide', handleResetAllSlide);
145
154
  window.removeEventListener('click', handlePageClick);
146
155
  window.removeEventListener('touchstart', handlePageClick);
156
+ uni.$off('auiListItem:resetAllSlide', handleResetAllSlide);
147
157
  });
148
158
  </script>
149
159
 
160
+ <!-- 样式部分完全保留,无任何改动 -->
150
161
  <style scoped lang="scss">
151
162
  @import '../style.scss';
152
163
  .aui-list-item {
@@ -159,8 +170,9 @@ onUnmounted(() => {
159
170
  }
160
171
  .aui-list-item-content-wrapper {
161
172
  display: flex;
173
+ // align-items: center;
162
174
  width: 100%;
163
- transition: transform 0.3s; /* 平滑过渡,提升体验 */
175
+ transition: transform 0.3s;
164
176
  }
165
177
  .aui-list-item_befor {
166
178
  margin:0 10px;
@@ -190,7 +202,7 @@ onUnmounted(() => {
190
202
  right: 0;
191
203
  top: 0;
192
204
  bottom: 0;
193
- width: 150px; /* 与左滑偏移-150对应 */
205
+ width: 150px; /* 自定义内容宽度 */
194
206
  background-color: #f0f0f0;
195
207
  display: flex;
196
208
  align-items: center;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrj-astra-ui",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "AstraUI - A powerful UI framework for UniApp with global SCSS color variables",
5
5
  "main": "index.js",
6
6
  "keywords": [