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


    目录

    前言

    App、H5效果

    小程序效果

    一、兼容APP、H5的方式

    二、兼容小程序

    三、实现同时兼容


    前言

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

    App、H5效果

    小程序效果

    一、兼容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. <script>
    2. export default {
    3. name:"search-slot",
    4. data() {
    5. return {
    6. };
    7. }
    8. }
    9. script>
    10. <style scoped>
    11. .slot{
    12. width: 750rpx;
    13. display: flex;
    14. }
    15. style>

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

    1. 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>

    这里也同样需要点击搜索导航跳转到搜索页面(此次文件夹需要在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. <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>

  • 相关阅读:
    [Windows驱动开发] BlackBone介绍
    设计模式: 模板方法模式
    untiy加载一张本地图片到Image
    如何学习微服务Spring Cloud
    (第一天:)1.字典赋值默认值、字典解压赋值
    深度学习基础知识数据 数据预处理transforms流程讲解
    浮动布局注意点,清除浮动
    实例056:画圈
    【Mycat1.6】缓存不生效问题处理
    685. 冗余连接 II--(每日一难phase--day13)
  • 原文地址:https://blog.csdn.net/yzq0820/article/details/126779408