深圳幻海软件技术有限公司 欢迎您!

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

2023-03-01

目录前言App、H5效果小程序效果一、兼容APP、H5的方式二、兼容小程序三、实现同时兼容前言首页都会提供一个搜索框给到客户,让客户自己去搜索自己想要的内容,这里就需要导航栏,来实现搜索页面的跳转,效果如下App、H5效果小程序效果一、兼容APP、H5的方式在常见titleNView配置代码示例中可

目录

前言

App、H5效果

小程序效果

一、兼容APP、H5的方式

二、兼容小程序

三、实现同时兼容


前言

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

App、H5效果

小程序效果

APP%E3%80%81H5%E7%9A%84%E6%96%B9%E5%BC%8F">一、兼容APP、H5的方式

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

  1. {
  2. "pages": [{
  3. "path": "pages/index/index", //首页
  4. "style": {
  5. "app-plus": {
  6. "titleNView": false //禁用原生导航栏
  7. }
  8. }
  9. }, {
  10. "path": "pages/log/log", //日志页面
  11. "style": {
  12. "app-plus": {
  13. "bounce": "none", //关闭窗口回弹效果
  14. "titleNView": {
  15. "buttons": [ //原生标题栏按钮配置,
  16. {
  17. "text": "分享" //原生标题栏增加分享按钮,点击事件可通过页面的 onNavigationBarButtonTap 函数进行监听
  18. }
  19. ],
  20. "backButton": { //自定义 backButton
  21. "background": "#00FF00"
  22. }
  23. }
  24. }
  25. }
  26. }, {
  27. "path": "pages/detail/detail", //详情页面
  28. "style": {
  29. "navigationBarTitleText": "详情",
  30. "app-plus": {
  31. "titleNView": {
  32. "type": "transparent"//透明渐变导航栏 App-nvue 2.4.4+ 支持
  33. }
  34. }
  35. }
  36. }, {
  37. "path": "pages/search/search", //搜索页面
  38. "style": {
  39. "app-plus": {
  40. "titleNView": {
  41. "type": "transparent",//透明渐变导航栏 App-nvue 2.4.4+ 支持
  42. "searchInput": {
  43. "backgroundColor": "#fff",
  44. "borderRadius": "6px", //输入框圆角
  45. "placeholder": "请输入搜索内容",
  46. "disabled": true //disable时点击输入框不置焦,可以跳到新页面搜索
  47. }
  48. }
  49. }
  50. }
  51. }
  52. ...
  53. ]
  54. }

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

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

 配置代码如下

  1. "path": "pages/index/index",
  2. "style": {
  3. "navigationBarTitleText": "小余努力搬砖",
  4. "app-plus": {
  5. "titleNView": {
  6. "searchInput": {
  7. "backgroundColor": "#f4f4f4",
  8. "borderRadius": "6px",
  9. "placeholder": "请输入搜索内容",
  10. "disabled": true
  11. },
  12. "buttons": [
  13. {
  14. "fontSrc": "/static/font/iconfont.ttf",//矢量图片引入路径
  15. "float": "left",
  16. "text": "\ue67a",//引入图片一定要带u
  17. "fontSize": "24px",//大小
  18. "color": "#666666"
  19. },
  20. {
  21. "float": "right",
  22. "text":"\ue661",
  23. "fontSrc": "/static/font/iconfont.ttf",
  24. "fontSize": "24px",
  25. "color": "#666666"
  26. }
  27. ]
  28. }}}

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

 来跳转到我们先要的页面

  1. onNavigationBarSearchInputClicked(){
  2. uni.navigateTo({
  3. url:'../search/search'
  4. })
  5. }

二、兼容小程序

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

  1. <template>
  2. <view class='slot'>
  3. <slot name='left'></slot>
  4. <slot name='center'></slot>
  5. <slot name='right'></slot>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. name:"search-slot",
  11. data() {
  12. return {
  13. };
  14. }
  15. }
  16. </script>
  17. <style scoped>
  18. .slot{
  19. width: 750rpx;
  20. display: flex;
  21. }
  22. </style>

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

  1. <search-slot class='flex'>
  2. <view class="left" slot='left'>
  3. <text class="iconfont icon-xiaoxi"></text>
  4. </view>
  5. <view class="center" slot='center'>
  6. <text class="iconfont icon-sousuo" @click="search"></text>
  7. </view>
  8. <view class="right" slot='right'>
  9. <text class="iconfont icon-richscan_icon"></text>
  10. </view>
  11. </search-slot>

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

  1. methods: {
  2. search(){
  3. uni.navigateTo({
  4. url:'../search/search'
  5. })
  6. }}

css样式代码

  1. <style>
  2. .flex {
  3. display: flex;
  4. height: 88rpx;
  5. line-height: 88rpx;
  6. align-items: center;
  7. }
  8. .left {
  9. width: 44rpx;
  10. flex: 0 0 44px;
  11. align-items: center;
  12. text-align: center;
  13. }
  14. .center {
  15. flex: 1;
  16. height: 60rpx;
  17. line-height: 60rpx;
  18. background-color: #eee;
  19. text-align: center;
  20. color: #ccc;
  21. }
  22. .right {
  23. width: 44rpx;
  24. flex: 0 0 44px;
  25. align-items: center;
  26. text-align: center;
  27. }
  28. </style>

三、实现同时兼容

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

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

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

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

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

  1. #ifdef  MP
  2. 需条件编译的代码
  3. #endif 

代码如下

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

  1. <!--#ifdef MP -->
  2. <search-slot class='flex'>
  3. <view class="left" slot='left'>
  4. <text class="iconfont icon-xiaoxi"></text>
  5. </view>
  6. <view class="center" slot='center'>
  7. <text class="iconfont icon-sousuo" @click="search"></text>
  8. </view>
  9. <view class="right" slot='right'>
  10. <text class="iconfont icon-richscan_icon"></text>
  11. </view>
  12. </search-slot>
  13. <!--#endif-->

文章知识点与官方知识档案匹配,可进一步学习相关知识
小程序技能树首页概览4732 人正在系统学习中
一直都在,除恶意骚扰,有想法就加
微信名片