微信小程序使用uni-app实现首页搜索框导航栏功能详解

下面是“微信小程序使用uni-app实现首页搜索框导航栏功能详解”的完整攻略。

前言

本攻略介绍了如何在微信小程序中使用uni-app框架实现首页搜索框导航栏功能。其中,搜索框和导航栏都是uni-app提供的基础组件,通过二次开发和调整可以实现需要的效果。本攻略分为以下几个步骤:

  1. 创建uni-app项目
  2. 修改App.vue
  3. 创建searchBar.vue组件并实现搜索框功能
  4. 在index.vue中添加导航栏并调整页面样式
  5. 实现导航栏的点击事件
  6. 给导航栏添加下划线效果

一、创建uni-app项目

创建一个uni-app项目,命名为“weapp-demo”,选择“空模板”作为项目框架。创建完成后,我们可以得到以下目录结构:

weapp-demo
- pages
  - index
    - index.vue
- App.vue
- main.js

其中,pages文件夹下的文件用于存放各个页面的组件,App.vue是整个应用的入口,main.js则是Vue的初始化代码。

二、修改App.vue

我们需要在App.vue中设置导航栏的样式和标题,并将index.vue作为入口页面进行渲染。打开App.vue文件,修改代码如下:

<template>
  <div>
    <nav>
      <span class="nav-item">微信</span>
      <span class="nav-item active">通讯录</span>
      <span class="nav-item">发现</span>
    </nav>
    <router-view></router-view>
  </div>
</template>

<style scoped>
nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 50px;
  background-color: #fff;
  border-bottom: 1px solid #ccc;
  padding: 0 15px;
}

.nav-item {
  font-size: 16px;
  color: #333;
  padding: 10px;
}

.active {
  color: #07c160;
  border-bottom: 2px solid #07c160;
}
</style>

以上代码定义了一个包含导航栏和router-view的组件。我们设置了导航栏的样式和标题,通过router-view渲染入口页面。

三、创建searchBar.vue组件并实现搜索框功能

我们需要在首页添加一个搜索框,这个搜索框需要有清空、聚焦和失焦等功能。我们可以将搜索框封装在一个独立组件中,然后在index.vue中调用该组件来实现搜索框。接下来,我们创建一个名为“searchBar”的组件,创建方法如下:

在pages文件夹下新建一个searchBar.vue文件,代码如下:

<template>
  <div class="search-bar">
    <div class="search-input-wrap">
      <i class="iconfont icon-search"></i>
      <input type="text" v-model="keyword" placeholder="搜索"></input>
      <i class="iconfont icon-close" v-show="keyword" @click="clearKeyword"></i>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        keyword: ""
      };
    },
    methods: {
      clearKeyword() {
        this.keyword = "";
      }
    }
  };
</script>

<style scoped>
  .search-bar {
    background-color: #fff;
    border-bottom: 1px solid #d9d9d9;
    height: 50px;
    display: flex;
    align-items: center;
    padding: 0 15px;
  }

  .search-input-wrap {
    height: 32px;
    border-radius: 16px;
    background-color: #f2f2f2;
    display: flex;
    align-items: center;
    padding: 0 10px;
    flex: 1;
  }

  input {
    display: block;
    height: 100%;
    border: none;
    background-color: transparent;
    flex: 1;
    margin-left: 10px;
    font-size: 14px;
  }

  i {
    font-size: 20px;
    color: #b3b3b3;
  }

  .icon-search::before {
    content: "\e607";
  }

  .icon-close::before {
    content: "\e60b";
  }
</style>

我们利用data()函数在$searchBar.vue$中的添加了一个组件级别的data,在组件中使用了input标签和两个iconfont图标。$methods$ 按钮clearKeyword清空搜索框的值。(代码中能看出来是vue2写法)

在上面代码中,我们定义一个名为“searchBar”的组件,在该组件中设置搜索框的样式,并实现搜索框的各种功能(清空、聚焦和失焦等)。我们在该组件中使用v-model绑定搜索框的值,使用v-show属性在搜索框有内容时显示清空按钮。

四、在index.vue中添加导航栏并调整页面样式

我们需要在index.vue中引入searchBar组件,并将其放在页面最上方。接下来,我们需要调整页面样式与布局。

<template>
  <div>
    <searchBar></searchBar>
    <div class="app-body"></div>
  </div>
</template>

<script>
import searchBar from "@/pages/searchBar.vue";
export default {
  name: "index",
  components: {
    searchBar
  }
};
</script>

<style scoped>
.app-body {
  height: 100vh;
  background-color: #f2f2f2;
}
</style>

以上代码是index.vue的完整代码。我们在该页面中使用了searchBar组件,并定义了一个名为“app-body”的容器,用来展示页面主体部分的内容。

五、实现导航栏的点击事件

接下来,我们需要为导航栏中的每一个按钮添加点击事件和变色效果。我们可以通过在App.vue中定义导航栏的样式和按钮,并使用$vue-router$来实现路由跳转,从而实现导航栏的功能。打开App.vue文件,添加如下代码:

<template>
  <div>
    <nav>
      <span class="nav-item" @click="toHome">微信</span>
      <span class="nav-item" :class="{ active: current === 'contacts' }" @click="toContacts">通讯录</span>
      <span class="nav-item" :class="{ active: current === 'discover' }" @click="toDiscover">发现</span>
    </nav>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      current: "contacts"
    };
  },
  methods: {
    toHome() {
      this.current = "chat";
      this.$router.push("/");
    },
    toContacts() {
      this.current = "contacts";
      this.$router.push("/contacts");
    },
    toDiscover() {
      this.current = "discover";
      this.$router.push("/discover");
    }
  }
};
</script>

以上代码中,我们为导航栏中的每一个按钮添加了点击事件,并使用:class属性来指定当前选择的按钮样式和判断当前路由路径来保持按钮激活状态。

六、给导航栏添加下划线效果

最后,我们需要给导航栏添加一个下划线效果,让用户直观地感受到当前页面所处的位置。我们可以通过为active类添加下划线样式来实现该效果。在App.vue的样式部分中添加以下代码:

.active {
  color: #07c160;
  border-bottom: 2px solid #07c160;
}

以上代码中,我们为active类添加了下划线样式。

示例说明

以下是两个示例说明:

示例一

我们需要实现一个类似微信聊天的场景,即用户进入应用后直接进入到第一个页面,该页面包含一个搜索框和一个联系人列表。我们点击导航栏中的“发现”按钮后,跳转到第二个页面,该页面显示一个列表,并且该页面对应导航栏的按钮保持激活状态。

我们可以根据以上需求,在pages文件夹下创建chat.vue、discover.vue和contacts.vue三个组件来实现。其中,chat.vue组件中包含一个搜索框和一个联系人列表,discover.vue组件中包含一个列表,而contacts.vue组件中不需要包含任何内容。

示例二

我们需要实现一个商品列表页面,该页面中包含一个搜索框和一个列表,以及导航栏中的“首页”、“推荐”和“我的”三个按钮。我们需要在点击导航栏的三个按钮时,分别实现路由跳转和按钮样式切换的效果。

我们可以根据以上需求,在pages文件夹下创建home.vue、recommend.vue和me.vue三个组件来实现。将home.vue组件定义为首页,使用v-for循环动态生成商品列表,同时在其中包含一个搜索框组件。而recommend.vue和me.vue组件则不需要包含列表。我们可以在App.vue中定义导航栏和样式并进行路由跳转和按钮样式切换的操作,从而实现该功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序使用uni-app实现首页搜索框导航栏功能详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js 固定悬浮效果实现思路代码

    下面我就来详细讲解一下“js 固定悬浮效果实现思路代码”的完整攻略。 一、思路分析 实现固定悬浮效果,需要用到position属性和offset方法:- 将悬浮元素设置为position: fixed,使其脱离文档流,随着页面滚动而停留在浏览器窗口的相对位置不变。- 利用offset方法获取目标元素在页面中的绝对位置,以便计算悬浮元素距离浏览器窗口顶部的距离…

    css 2023年6月10日
    00
  • Vue指令的学习

    关于Vue指令学习的完整攻略,主要包含以下几个方面: 1、Vue指令的概念及分类 Vue指令的概念 Vue指令有时候也被称为“指令语法”,用于在模板中添加DOM元素属性或对元素进行逻辑控制。Vue.js内置了许多指令,也允许我们自定义指令。 Vue指令的分类 Vue指令大致可分为以下几类: 条件指令:如v-if、v-else、v-show等,用于控制DOM元…

    css 2023年6月9日
    00
  • 使用css实现全兼容tooltip提示框

    下面是使用CSS实现全兼容tooltip提示框的完整攻略。 1. 准备工作 在编写CSS之前,我们需要对鼠标事件有一定的了解。常用的鼠标事件有以下几种: mouseover 鼠标放在元素上时触发 mouseout 鼠标移出元素时触发 mousemove 鼠标在元素上移动时触发 通过这些事件,我们可以实现鼠标悬浮时显示提示框的效果。 2. 实现思路 实现too…

    css 2023年6月10日
    00
  • 详解vue过度效果与动画transition使用示例

    详解Vue过渡效果与动画Transition使用示例 在Vue中,为了使UI更加友好、动态,我们可以使用过度效果和动画来实现许多炫酷的效果。Vue提供了<transition>和<transition-group>两个组件,用于在DOM元素插入和删除时自动应用过渡效果和动画。 <transition>组件 <tran…

    css 2023年6月10日
    00
  • 深入解读CSS3中transform变换模型的渲染

    下面我就为大家详细讲解“深入解读CSS3中transform变换模型的渲染”的完整攻略。 一、什么是CSS3中的变换 CSS3中的变换是指通过使用transform属性,实现对包括平移、旋转、缩放和斜切等变换类型的元素进行样式调整,实现更加多样化的布局结构和视觉效果。 二、transform属性常见的值 translate(x, y):平移变换,其中x、y表…

    css 2023年6月10日
    00
  • 浅谈css命名规则(新手必看)

    下面是 “浅谈css命名规则(新手必看)” 的完整攻略: 1. 命名规则的重要性 在编写 CSS 样式表时,命名规则是非常重要的。良好的命名规范能够提高代码的可读性和可维护性,帮助开发人员更轻松地理解代码的功能和结构,以及在修改和维护代码时更加高效。 因此,使用合适的 CSS 命名规则是非常重要的,它可以使你的代码更易于理解和维护,也可以让团队开发更顺畅。 …

    css 2023年6月10日
    00
  • 倾力总结40条常见的移动端Web页面问题解决方案

    针对“倾力总结40条常见的移动端Web页面问题解决方案”的完整攻略,我会从以下几个方面进行详细讲解: 文章题目和简介 文章题目为“倾力总结40条常见的移动端Web页面问题解决方案”,主要介绍了40个常见的移动端Web页面问题的解决方案,涵盖了页面布局、字体显示、图片加载、滚动效果等多方面内容。 文章结构和颜色渐变块 文章采用了层次分明的结构,将40个解决方案…

    css 2023年6月10日
    00
  • jquery jqPlot API 中文使用教程(非常强大的图表工具)

    首先介绍一下jqPlot。jqPlot是基于jQuery的开源图表插件,可以快速方便地创建各种精美的图表,包括线图、柱状图、饼图等等。API文档非常详细,我们可以根据需要调用相关API实现自定义的功能。接下来,按照以下步骤来讲解完整攻略。 安装及引入 首先需要下载jqPlot的最新版。解压后,将以下文件加入到页面头部: <link rel="…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部