【微信小程序】使用uni-app——开发首页搜索框导航栏(可同时兼容APP、H5、小程序)

news2025/2/27 8:42:48

目录

前言

App、H5效果

小程序效果

一、兼容APP、H5的方式

二、兼容小程序

三、实现同时兼容


前言

首页都会提供一个搜索框给到客户,让客户自己去搜索自己想要的内容,这里就需要导航栏,来实现搜索页面的跳转,效果如下

App、H5效果

小程序效果

一、兼容APP、H5的方式

在常见titleNView配置代码示例中可以看到基本样式的代码如下

{
	"pages": [{
			"path": "pages/index/index", //首页
			"style": {
				"app-plus": {
					"titleNView": false //禁用原生导航栏
				}
			}
		}, {
			"path": "pages/log/log", //日志页面
			"style": {
				"app-plus": {
					"bounce": "none", //关闭窗口回弹效果
					"titleNView": {
						"buttons": [ //原生标题栏按钮配置,
							{
								"text": "分享" //原生标题栏增加分享按钮,点击事件可通过页面的 onNavigationBarButtonTap 函数进行监听
							}
						],
						"backButton": { //自定义 backButton
							"background": "#00FF00"
						}
					}
				}
			}
		}, {
			"path": "pages/detail/detail", //详情页面
			"style": {
				"navigationBarTitleText": "详情",
				"app-plus": {
					"titleNView": {
						"type": "transparent"//透明渐变导航栏 App-nvue 2.4.4+ 支持
					}
				}
			}
		}, {
			"path": "pages/search/search", //搜索页面
			"style": {
				"app-plus": {
					"titleNView": {
						"type": "transparent",//透明渐变导航栏 App-nvue 2.4.4+ 支持
						"searchInput": {
							"backgroundColor": "#fff",
							"borderRadius": "6px", //输入框圆角
							"placeholder": "请输入搜索内容",
							"disabled": true //disable时点击输入框不置焦,可以跳到新页面搜索
						}
					}
				}
			}
		}
		...
	]
}

我们并不需要所有的内容,本次我将介绍的是,"buttons","searchInput"的组合使用,这里的buttons其实是我的导航栏左右的两个图片,可以配合图标实现想要的功能,searchInput就是中间的搜索框

需要在pages.json中配置,可在button中添加,不过需要注意的是,不管添加文字,矢量图片,默认都是右浮动,可以把其中一个改成左浮动,这里我使用的是阿里巴巴矢量图库的图片,下载文件,引入即可有需要的小伙伴我可以免费提供一个文件夹。

 配置代码如下

"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "小余努力搬砖",
				"app-plus": {
					"titleNView": {
						"searchInput": {
							"backgroundColor": "#f4f4f4",
							"borderRadius": "6px", 
							"placeholder": "请输入搜索内容",
							"disabled": true 
						},
							"buttons": [
						{
							"fontSrc": "/static/font/iconfont.ttf",//矢量图片引入路径
							"float": "left",
							"text": "\ue67a",	//引入图片一定要带u			
							"fontSize": "24px",//大小
							"color": "#666666"
						},
						{	
							"float": "right",
							"text":"\ue661",
							"fontSrc": "/static/font/iconfont.ttf",
							"fontSize": "24px",
							"color": "#666666"
						}
										]
}}}

为了达到跳转的效果,我要在页面同级创建文件夹,为搜索页面,我们要主页使用页面生命周期onNavigationBarSearchInputClicked(此次文件夹需要在pages.json中注册)

 来跳转到我们先要的页面

onNavigationBarSearchInputClicked(){
			uni.navigateTo({
				url:'../search/search'
			})
		}

二、兼容小程序

需要与pages同级创建一个components文件夹,在此文件夹下,不需要在用import引入,就可以注册,创建一个如下的插槽子文件夹,带同名目录。在components中的文件都不需要在pages.json注册。(这里实现的主要方式,是通过自己写的样式,来展现出一个搜索框)

<template>
	<view class='slot'>
		<slot name='left'></slot>
		<slot name='center'></slot>
		<slot name='right'></slot>
		
	</view>
</template>

<script>
	export default {
		name:"search-slot",
		data() {
			return {
				
			};
		}
	}
</script>

<style scoped>
.slot{
	width: 750rpx;
	display: flex;
}
</style>

在首页中引入插槽(不会或者忘记的,可以去学习博主的一学就会的插槽教学),其中的图片都是引入的阿里巴巴矢量图片,图片是我提前准备好的,有想要的小伙伴,私聊我。如下就是我提前准备好的,只要用class就能引入

<search-slot class='flex'>
	<view class="left" slot='left'>
		<text class="iconfont icon-xiaoxi"></text>
	</view>
	<view class="center" slot='center'>
		<text class="iconfont icon-sousuo" @click="search"></text>
	</view>
	<view class="right" slot='right'>
		<text class="iconfont icon-richscan_icon"></text>
	</view>
</search-slot>

这里也同样需要点击搜索导航跳转到搜索页面(此次文件夹需要在pages.json中注册),是通过@click绑定事件完成的,路径还是同样的方法(创建一个专属的搜索页面)

methods: {
search(){
	uni.navigateTo({
	url:'../search/search'
})
				
}}

css样式代码

<style>
.flex {
		display: flex;
		height: 88rpx;
		line-height: 88rpx;
		align-items: center;
	}

	.left {
		width: 44rpx;
		flex: 0 0 44px;
		align-items: center;
		text-align: center;
	}

	.center {
		flex: 1;
		height: 60rpx;
		line-height: 60rpx;
		background-color: #eee;
		text-align: center;
		color: #ccc;
	}

	.right {
		width: 44rpx;
		flex: 0 0 44px;
		align-items: center;
		text-align: center;
		
	}
</style>

三、实现同时兼容

通过以上代码,已经实现了在app、h5、小程序,实现搜索框导航栏,但是如果想要同时满足app、h5、小程序,就需要对此作出一个区域性的判断。

如果没有按兼容性显示,同时配置如上的两个搜索框导航栏,在app、h5就会出现两个搜索框,因为它们兼容小程序的配置

但是小程序只有一个,因为小程序不兼容在 pages.json中配置的搜索框

这时候不用紧张,我们还记得媒体查询吗,这里的方式,和媒体查询几乎是一个意思,在特定的环境使用特定的样式,我们这里通过官网文档可以找到条件编译

使用很简单,只要将代码包裹进条件中即可,我们这里只要将小程序的包裹进,只在微信小程序中编译的条件中即可

#ifdef  MP
需条件编译的代码
#endif 

代码如下

把配置在首页的小程序的导航栏包裹住(小程序不兼容在 pages.json中的配置,这里就不用在意是否需要条件编译)这样,小程序的搜索框导航不会在app、h5出现了。从而实现了同时兼容的效果。

	<!--#ifdef MP -->
		<search-slot class='flex'>
			<view class="left" slot='left'>
				<text class="iconfont icon-xiaoxi"></text>
			</view>
			<view class="center" slot='center'>
				<text class="iconfont icon-sousuo" @click="search"></text>
			</view>
			<view class="right" slot='right'>
				<text class="iconfont icon-richscan_icon"></text>
			</view>
		</search-slot>
	<!--#endif-->

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue框架教程-从入门到项目实战

创建Vue项目 我们通过vue-cli创建一个vue项目&#xff0c; 在cmd窗口输入 vue ui 进入vue-cli可视化界面&#xff08;如果无效请升级vue-cli版本&#xff09;点击创建&#xff0c;选择一个项目目录输入项目名称和git初始化窗口(可选)选择预设&#xff0c;可以选择手动和预定的…

如何清除全部的定时器

通过 setTimeout() 函数来建立定时器&#xff0c;并通过 clearTimeout() 函数来清除定时器。 let timerTimeout setTimeout(() > {console.log("2222222-----------------------------"); }, 1000); clearTimeout(timerTimeout);通过 setInterval() 函数来建立定…

Node.js error: ERR_OSSL_EVP_UNSUPPORTED

Node.js 17版本的更新日志&#xff1a; 2021-10-19, Version 17.0.0 (Current), BethGriggs Notable Changes ... OpenSSL 3.0 Node.js now includes OpenSSL 3.0, specifically quictls/openssl which provides QUIC support. With OpenSSL 3.0 FIPS support is again availab…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

报错起因 在VScode中运行vue项目时&#xff0c;【前提&#xff1a;把项目文件换到另一个网盘存放&#xff0c;存放失败&#xff0c;又重新放回原位置再次运行时】 报错如下&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查 解决…

C++——WebServer服务器项目

项目场景&#xff1a; C——WebServer服务器编程 项目搭建 &#xff08;1&#xff09;配置虚拟机&#xff0c;下载XShell、Xftp以及windows版本的VScode&#xff1b; &#xff08;2&#xff09;安装SSH&#xff1a; sudo apt install openssh-server&#xff08;3&#xff…

React组件的生命周期函数

文章目录React组件生命周期认识生命周期生命周期函数不常用生命周期函数React组件生命周期 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&#xff1b; React组件也有自己的生命周期&#xff0c;了解组件的生命周期可以让我们在最…

controller层,service层,mapper层,entity层的作用与联系。

一. controller层 controller层是用来接受前台数据和返回页面请求信息的&#xff0c;Controller层是不允许直接操作数据库的&#xff01;它就像一个服务员&#xff0c;哪桌客人需要点菜了&#xff0c;就喊一声服务员&#xff01; 对应的&#xff0c;外界需要完成什么样的业务&…

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

目录​​​​​​​ 前言 Flex 布局是什么&#xff1f; Flex 简介 Flex 容器属性 Flex 基本使用 场景一 flex-direction 场景二 justify-content align-items flex-wrap 场景三 前言 我们知道&#xff0c;网页展示就好比一个个盒子堆叠在一起&#xff0c;通过调整…

2022版完整版web前端学习路线图(超详细自学路线)

跟着路线图认真坚持学习从前端小白到大神不是梦&#xff0c;0基础看这一篇足矣&#xff01; 学们记得加关注点赞收藏&#xff0c;自学路上不迷糊&#xff01; 零基础小白自学前端路线图速览&#xff1a; 阶段一&#xff1a;核心基础入门 前端计算机常识 ➾ htmlcss基础 ➾ h…

JDBC 连接 MySQL

哈喽~大家好&#xff0c;这次我们来看看 JDBC 如何 连接 MySQL. 目录 一、开头 二、介绍 1、JDBC 的概念 2、JDBC 的功能 3、JDBC 的常用接口和类 三、数据库的创建&#xff08;MySQL&#xff09; 1、连接 MySQL (1)、注册驱动 (2)、获取连接 (3)、获取执行者连接 …

猿创征文|超实用的前端开发工具分享

&#x1f373;作者&#xff1a;贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛\color{#FF0000}{贤蛋 大眼萌 &#xff0c;一名很普通但不想普通的程序媛}贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛&#x1f933; &#x1f64a;语录&#xff1a;多一些不为什么的…

Element UI 及 Element Plus框架

一&#xff0c;何为Element UI 及 Element Plus&#xff1f; 它们是前端框架。它是包含很多有自己风格的组件库。 Element目前有两个版本&#xff1a;element-ui 及 element-plus两个版本。它将HTML的基础控件进行了封装&#xff0c;用户只需要调用这些控件就可以了。而不需要…

实验一 基于CSS+HTML+JS开发简单个人网站

目录&#xff1a; 实验要求 实验代码 1.注册 2.登录 3.主页 4.个人简介 5.我的理想 6.我的生活 7.学习内容 总结 实验要求 实验一 基于CSSHTMLJS开发简单个人网站 实验学时&#xff1a;4 实验类型&#xff1a;设计 一、目的与任务 目的&#xff1a;熟悉在静态网…

Vue3-Pinia的基本使用

什么是Pinia呢&#xff1f; Pina开始于大概2019&#xff0c;是一个状态管理的库&#xff0c;用于跨组件、页面进行状态共享&#xff08;这和Vuex、Redux一样&#xff09;,用起来像组合式API&#xff08;Composition API&#xff09; Pinia和Vuex的区别 PInia的最初是为了探索…

web期末作业网页设计——我的家乡(网页源码)

作品介绍 1.网页作品简介方面 &#xff1a;HTML网站模板。主要有&#xff1a;首页 家乡简介 风景名胜 特色美食 站长介绍 在线调查 等总共 6 个页面html下载。 2.网页作品编辑&#xff1a;此作品为学生个人主页网页设计题材&#xff0c;代码为简单学生水平 htmlcss 布局制作&am…

超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题

文章目录1. 引言2. 下载VSCode3. 解决VSCode下载速度特别慢4. 安装VSCode1. 引言 今天用WebStorm运行前端代码时&#xff0c;发现不太好打断点。 于是&#xff0c;打算改用VSCode来运行前端代码&#xff0c;但前提是要安装VSCode&#xff0c;如下便是超详细的VSCode安装教程以…

小程序中使用echarts(硬货,全网最详细教程!)

echarts是一个基于JS的数据可视化图标库&#xff0c;它提供了直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性定制的数据可视化图表。一般在vue中会使用到&#xff0c;并且官网也详细的说明了如何在vue中使用&#xff0c;但是今天我想来探讨的是&#xff0c;如何在微…

你评论,我赠书~【哈士奇赠书 - 15期】〖HTML5+CSS3+JavaScript从入门到精通(微课精编版)(第2版)〗等你来拿

文章目录❤️‍&#x1f525; 赠书活动 - 《HTML5CSS3JavaScript从入门到精通&#xff08;微课精编版&#xff09;&#xff08;第2版&#xff09;》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x…

Parsing error: No Babel config file detected for xxx Either disable config file checking...报错解决方法

Parsing error: No Babel config file detected for xxx Either disable config file checking…报错解决方法 使用Vue3创建项目&#xff0c;创建完成后发现会报错&#xff0c;如下图&#xff1a; 翻译了一下&#xff0c;其实已经告诉我们解决方法了&#xff1a; Either disa…

node.js中Express简介

Express简介 1.什么是Express 官方给出的概念&#xff1a;Express是基于Node.js平台&#xff0c;快速、开放、极简的web开发框架。 通俗理解&#xff1a;Express的作用和Node.js内置的http模块类似&#xff0c;是专门用来创建web服务器的 Express的本质&#xff1a;就是一个n…