Uniapp项目重定义左上角的返回箭头的事件

在 UniApp 里,重定义左上角返回按钮事件的方式会依据不同的运行环境(如 H5、小程序、App 等)有所不同。

重定义onBackPress事件的方案

1. H5 环境

在 H5 环境中,左上角的返回按钮实际上是浏览器的返回功能,你可以通过监听 popstate 事件来重定义返回逻辑。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<template>
<view>
<!-- 页面内容 -->
</view>
</template>

<script>
export default {
onLoad() {
// 监听 popstate 事件
window.addEventListener('popstate', this.handleBack);
},
onUnload() {
// 页面卸载时移除事件监听,避免内存泄漏
window.removeEventListener('popstate', this.handleBack);
},
methods: {
handleBack() {
// 在这里编写自定义的返回逻辑
console.log('执行自定义返回逻辑');
// 可以使用 uni.navigateBack 来模拟返回
uni.navigateBack({
delta: 1
});
}
}
};
</script>

代码解释

  • onLoad 生命周期函数:在页面加载时,添加 popstate 事件监听器,当用户点击浏览器返回按钮时,会触发 handleBack 方法。
  • onUnload 生命周期函数:在页面卸载时,移除 popstate 事件监听器,防止内存泄漏。
  • handleBack 方法:自定义的返回逻辑,可以在这里执行你需要的操作,如提示用户确认、保存数据等。

2. 小程序环境

在小程序环境中,UniApp 提供了 onBackPress 生命周期函数来重定义返回按钮事件。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<view>
<!-- 页面内容 -->
</view>
</template>

<script>
export default {
onBackPress(options) {
// 判断是否为左上角返回按钮触发
if (options.from === 'navigateBack') {
// 在这里编写自定义的返回逻辑
console.log('执行自定义返回逻辑');
// 返回 true 表示阻止默认返回行为
return true;
}
// 返回 false 表示使用默认返回行为
return false;
}
};
</script>

代码解释

  • onBackPress 生命周期函数:当用户点击左上角返回按钮时会触发该函数,options 参数包含了返回的来源信息。
  • options.from === 'navigateBack':判断是否为左上角返回按钮触发。
  • return true:阻止默认的返回行为,执行自定义逻辑。
  • return false:使用默认的返回行为。

3. App 环境

在 App 环境中,同样可以使用 onBackPress 生命周期函数来重定义返回按钮事件。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<view>
<!-- 页面内容 -->
</view>
</template>

<script>
export default {
onBackPress(options) {
// 判断是否为左上角返回按钮触发
if (options.from === 'navigateBack') {
// 在这里编写自定义的返回逻辑
console.log('执行自定义返回逻辑');
// 返回 true 表示阻止默认返回行为
return true;
}
// 返回 false 表示使用默认返回行为
return false;
}
};
</script>

代码解释

与小程序环境类似,onBackPress 生命周期函数用于处理返回按钮事件,通过判断 options.from 的值来确定是否为左上角返回按钮触发,并根据需要返回 truefalse 来控制返回行为。

重定义navigationBar的方案

可以通过定义 "navigationStyle": "custom" 来重定义左上角返回按钮事件,"navigationStyle": "custom" 能够让你自定义导航栏,这样就可以完全掌控返回按钮的样式和点击事件。以下为你详细介绍具体的实现步骤和示例代码:

实现步骤

1. 配置页面导航栏样式

在页面的 pages.json 文件或者当前页面的配置中,将 navigationStyle 设置为 "custom",以此来禁用系统默认的导航栏。

2. 自定义导航栏组件

在页面模板里创建一个自定义的导航栏,其中包含返回按钮,并为其绑定点击事件。

3. 处理返回按钮点击事件

在返回按钮的点击事件处理函数中,编写自定义的返回逻辑。

示例代码

pages.json 配置

1
2
3
4
5
6
7
8
9
10
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationStyle": "custom"
}
}
]
}

页面模板 (index.vue)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<template>
<view>
<!-- 自定义导航栏 -->
<view class="custom-nav">
<!-- 返回按钮 -->
<view class="back-btn" @click="handleBack">
<text>返回</text>
</view>
<view class="title">页面标题</view>
</view>
<!-- 页面内容 -->
<view class="page-content">
<!-- 这里放置页面的具体内容 -->
</view>
</view>
</template>

<script>
export default {
methods: {
handleBack() {
// 在这里编写自定义的返回逻辑
console.log('执行自定义返回逻辑');
// 可以使用 uni.navigateBack 来模拟返回
uni.navigateBack({
delta: 1
});
}
}
};
</script>

<style scoped>
.custom-nav {
display: flex;
align-items: center;
height: 44px;
background-color: #f8f8f8;
border-bottom: 1px solid #eee;
padding: 0 10px;
}

.back-btn {
margin-right: 10px;
cursor: pointer;
}

.title {
flex: 1;
text-align: center;
font-weight: bold;
}

.page-content {
padding: 10px;
}
</style>

代码解释

  • pages.json 配置:把 navigationStyle 设置成 "custom",从而禁用系统默认的导航栏。
  • 自定义导航栏:在页面模板中创建了一个自定义的导航栏,包含返回按钮和页面标题。
  • 返回按钮点击事件:为返回按钮绑定了 handleBack 方法,在该方法中编写了自定义的返回逻辑。

注意事项

  • 确保你的自定义导航栏与页面内容之间有足够的间距,避免内容被遮挡。
  • 你可以根据需要自定义导航栏的样式,例如背景颜色、字体大小等。
  • 如果你需要在自定义导航栏中添加其他功能,可以在 handleBack 方法中添加相应的逻辑。

Uniapp项目重定义左上角的返回箭头的事件
https://jycpp.github.io/25-04-15-Uniapp项目重定义左上角的返回箭头的事件.html
作者
Jet Yan
发布于
2025年4月15日
许可协议