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

yizhihongxing

下面是“微信小程序使用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日

相关文章

  • 巧用HTML5给按钮背景设计不同的动画简单实例

    下面是详细的攻略: 背景知识 在实现 HTML5 按钮背景动画之前,有些基础知识需要了解: CSS3 伪类 CSS3 中的伪类可以让我们在某些元素状态改变的时候(如:鼠标 hover、点击等),加入一些特殊的样式。常见的伪类有以下几种: :hover – 鼠标悬停在该元素上时 :active – 点击该元素时(鼠标还没松开时) :focus – 该元素被选中…

    css 2023年6月9日
    00
  • html内联元素和块级元素的基本概念及使用示例

    HTML中的元素可以分为内联元素和块级元素,这两种元素有着不同的基本概念和使用方式。本文将详细讲解内联元素和块级元素的基本概念及使用示例。 基本概念 内联元素 内联元素是指在排版时与其他内联元素在同一行内显示的元素,通常用于标记文本中的一部分,比如<a>、<strong>、<em>、<span>等。内联元素的特…

    css 2023年6月10日
    00
  • jquery插件corner实现圆角边框的方法

    下面是详细的攻略: 什么是corner插件? Corner是一个jQuery插件,它可以用于实现圆角、渐变、阴影等效果。 安装corner插件 要使用Corner插件,我们需要先安装它。可以使用以下两种方式之一来安装。 通过npm安装 如果您使用npm管理您的项目依赖,可以使用以下命令来安装Corner插件: npm install jquery-corne…

    css 2023年6月10日
    00
  • CSS极坐标的实例代码

    CSS极坐标是CSS3新增的一个坐标系统,与传统的直角坐标系有所不同,可以实现独特的排版和布局效果。下面,我们来详细讲解如何使用CSS极坐标进行布局排版。 一、基本语法 CSS极坐标的基本语法如下: .selector { /* 引用渐变的方法/函数 */ background: radial-gradient(circle at X轴 Y轴, 渐变起始颜色…

    css 2023年6月10日
    00
  • CSS控制文字在一条线中间的方法

    应用 CSS 控制文字在一条线中间的方法,可以使得页面元素的样式更加美观统一。其实在实现过程中,有多种不同的方法,下面给出两条示例说明。 方法一:使用 line-height 属性 line-height 属性用于设置行高,通过计算行高与字体大小之间的差值,可以实现让文字在一条线中间对齐的效果。 p { font-size: 16px; line-heigh…

    css 2023年6月10日
    00
  • CSS SandBox应用场景及常见问题

    CSS SandBox应用场景及常见问题 什么是CSS SandBox CSS SandBox是一个基于CSS的“游乐场”,它可以提供一个独立的CSS环境用于开发者的实验和学习。在CSS SandBox中,开发者可以方便地尝试各种CSS属性、布局和动画效果而不必担心对其他页面的影响。 CSS SandBox的优点包括: 独立环境,不影响其他页面的样式 方便尝…

    css 2023年6月9日
    00
  • 使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法

    使用CSS媒体查询和JavaScript判断浏览器设备类型的方法可以用于响应式网站的开发,在不同设备上优化网站的布局和风格,提升用户体验。 使用CSS媒体查询 CSS媒体查询可以根据浏览器窗口大小的变化为不同的屏幕尺寸设置不同的样式。通过CSS媒体查询我们可以使用不同的样式设置来适配不同的设备,比如手机、平板、电脑等。 媒体查询语法 媒体查询定义了一个限制条…

    css 2023年6月10日
    00
  • 教你使用css制作出超级炫酷的血轮眼和轮回眼特效

    下面是“教你使用css制作出超级炫酷的血轮眼和轮回眼特效”的完整攻略: 教你使用css制作出超级炫酷的血轮眼和轮回眼特效 准备工作 在开始之前,需要准备以下工作: 在html中引入以下css样式: .eye { width: 30px; height: 30px; background: white; border: 3px solid black; bor…

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