uni-app 原生导航 titleNView 搜索框分享
uni-app 原生导航 titleNView 搜索框分享
贴子为以前的,官方已经集成了搜索框了
移步到这里看
https://uniapp.dcloud.io/collocation/pages?id=app-plus
经测试官方已修复安卓的BUG
以下是苹果的
以下是安卓的
操作方法,先配置是下page.json
{
"path": "你的页面",
"style": {
"backgroundColorTop": "#ebebeb",
"backgroundColorBottom": "#ebebeb",
"app-plus": {
"scrollIndicator": "none",
"titleNView": {
"titleText":"",//不要设置标题
"buttons": [{
"text": "取消",
"fontSize": "14"
}]
}
}
}
}
不要设置标题,不然在安卓上就会显示出来,画的盖不住
以下操作在您要画搜索框的页面
在onload引用startcreatview就可以了
设置延迟,不做延迟会出现错误
startcreatview(){
var s = this;
s.TitleTimer = setTimeout(function() {
s.createView();
}, 100);//具体缓迟时间可以按需设置
},
createView() {
clearTimeout(this.TitleTimer);
var s = this;
var pages = getCurrentPages();
var page = pages[pages.length - 1];
var currentWebview = page.$getAppWebview();
var nTitle = currentWebview.getTitleNView();
nTitle.draw(
[{
"tag": "rect",
"id": "rect",
"color": "#999",
"position": {
"left": "50px",
"right": "50px",
"top": "7px",
"bottom": "7px"
},
"rectStyles": {
"color": "#f6f6f6",
"radius": "30px",
"borderColor": "#999"
}
},
{
"tag": "font",
"id": "font",
"text": "\ue466",
"position": {
"left": "55px",
"width": "30px",
"top": "7px",
"bottom": "7px"
},
"textStyles": {
"size": "13px",
"fontSrc": "/static/uni.ttf",
"color": "#999"
}
},
{
"tag": "input",
"id": "input",
"position": {
"left": "80px",
"right": "70px",
"top": "7px",
"bottom": "7px"
},
"inputStyles": {
"placeholder": "关键字搜索",
"borderRadius": "30px",
"borderWidth": "0px",
"fontSize": "13px",
"type": "search",
"fontSrc": "/static/uni.ttf",
"color": "#999",
onComplete: function(e) {
console.log('点击搜索执行' + e.text)
},
onFocus: function(e) {
console.log('获得焦点')
},
onBlur: function(e) {
console.log('失去焦点')
}
}
}
]
);
},
如果只需要一个假搜索框,把上面代码的inputStyles部份替换为
"textStyles": {
"size": "13px",
"fontSrc": "/static/uni.ttf",
"color": "#999"
}
同时添加监听假搜索框的点击事件nTitle.addEventListener(‘click’, ‘点击事件’, false);
在uni-app中,使用原生导航栏(titleNView
)可以自定义页面的顶部导航栏,包括添加搜索框和分享按钮。下面是一个示例代码,展示了如何在pages.json
中配置原生导航栏,并在页面的生命周期函数中处理搜索框和分享按钮的逻辑。
pages.json 配置
首先,在pages.json
中配置页面的原生导航栏。这里假设我们有一个名为index
的页面。
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "", // 隐藏默认标题
"app-plus": {
"titleNView": {
"buttons": [
{
"text": "分享",
"fontSrc": "/static/fonts/iconfont.ttf#icon-share", // 可选,自定义图标字体
"fontSize": 16,
"onTap": "handleShare" // 点击事件处理函数
}
],
"searchInput": {
"placeholder": "搜索内容",
"autoFocus": false,
"onConfirm": "handleSearch" // 搜索确认事件处理函数
}
}
}
}
}
]
}
页面生命周期函数处理
在pages/index/index.vue
中,处理搜索框和分享按钮的逻辑。
<template>
<view>
<!-- 页面内容 -->
</view>
</template>
<script>
export default {
methods: {
handleSearch(event) {
// 处理搜索事件,event.value 是搜索框的值
console.log('搜索内容:', event.value);
// 这里可以添加搜索逻辑,比如发送请求到服务器
},
handleShare() {
// 处理分享事件
uni.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
});
// 触发分享
uni.share({
title: '分享标题',
path: '/pages/index/index', // 分享路径
imageUrl: '/static/images/share.png', // 分享图标
success: function () {
console.log('分享成功');
},
fail: function (err) {
console.error('分享失败:', err);
}
});
}
}
}
</script>
<style>
/* 页面样式 */
</style>
上述代码展示了如何在uni-app中使用原生导航栏的titleNView
来添加搜索框和分享按钮,并分别处理它们的点击事件。handleSearch
方法处理搜索框的确认事件,而handleShare
方法处理分享按钮的点击事件。注意,fontSrc
用于自定义分享按钮的图标,需要确保路径正确,并且已经引入了相应的字体文件。