【小程序项目开发--京东商城】uni-app之自定义搜索组件(上)-- 组件UI

简介: 【小程序项目开发--京东商城】uni-app之自定义搜索组件(上)-- 组件UI

文章目录

一、介绍并创建search分支(选读*)

  • git checkout -b search 注释:创建分支并跳转

二、自定义搜索组件UI结构

2.1在component目录上创建组件

图片.png

2.2 定义自定义组件的UI结构

对于搜索图标,uni官方给我们了相应的组件

图片.png

这些官方组件都放在了文件uni_modules目录下了,直接使用即可

  • 模板
<template>
  <view>
    <!-- 搜索框容器 -->
    <view class="search-container">
      <!-- 搜索框内部盒子 -->
      <view class="search-box">
        <!-- 使用uni-ui 提供的图标组件 -->
        <uni-icons type="search" size="17"></uni-icons>
        <text class="search-content">搜索</text>
      </view>
    </view>
  </view>
</template>
  • 样式
<style lang="scss">
  .search-container {
    height: 100rpx;
    background-color: #ff1e0a;
    display: flex;
    align-items: center;
    // 上下 0 间距, 左右20间距
    padding: 0rpx 20rpx;
    .search-box {
      background-color: #ffffff;
      border-radius: 100rpx;
      height: 72rpx;
      width: 100%;
      display: flex;
      // 整体块级元素横向居中
      justify-content: center;
      // 项目内部元素居中
      align-items: center;
      .search-content {
        text-align: center;
        font-size: 30rpx;
        margin-left: 10rpx ;
      }
    }
  }
</style>

效果:

图片.png

2.3 解决一个小bug

在滑动三级分类时,会发现显示的不完整,且此时搜索框是会可以被滑动,这是因为我们在scroll-view滑动组件中设置的高度是手机可用的高度,而此时搜索框组件占用了一部分高度,对应的,底部也会减少一部分高度,所以我们在设置其滑动组件高度时可以减去搜索框对应使用高度

图片.png

各个高度如下

图片.png

23.gif

  • 修改如下(减去50px):
onLoad() {
  // 调取手机高度数据
  const {
    windowHeight: Hight
  } = uni.getSystemInfoSync()
  this.windowHeight = Hight - 50  // 减去搜索框高度
  // 调取分类数据
  this.getCateList()
},

图片.png成功解决

三、封装自定义组件属性和click事件

3.1 自定义属性

通过自定义属性增强组件的通用性(自定义背景颜色,圆角程度)

  • props节点定义数据(类似在原生小程序中的properties属性,
  • props是父组件与组件之间的通信,而data则是组件的私有数据,无法直接传参
  • 默认值为default属性
  props: {
      // 背景颜色
      bgcolor: {
        type: String,
        default: '#ff1e0a'
      },
      // 圆角尺寸
      radius: {
        type: Number,
        default: 100
      }
    },
  • 在组件中动态绑定style,输入键值对
 <!-- 搜索框容器 -->
    <view class="search-container" :style="{'background-color': bgcolor}">
      <!-- 搜索框内部盒子 -->
      <view class="search-box" :style="{'broder-radius': radius + 'rpx'}">
  • 那么在使用该组件时,我们可以对其传参,设置背景颜色和圆角度,如
    注意:在组件传参中,参数由双引号包裹起来·"" 如果参数字符串,那么字符串形式应该为 '字符串',不然报错会难以查找
 <!-- 自定义搜索组件 -->
  <my-search v-bind:bgcolor="'pink'" v-bind:radius="10"></my-search>

效果:

图片.png

3.2 click 事件绑定

实现点击该组件实现页面跳转到搜索页面,按照我们以往的思路我们自然而然地想为该组件绑定一个处理函数,那么该方法可不可行呢?

  • 我们绑定一个事件处理函数,并在事件触发后打印ok:
<my-search v-on:click="gotosearch"></my-search>
// 搜索框click事件
      gotosearch: () => {
        console.log('ok')
      },

可以看到毫无效果:图片.png

  • 原因:

当前为自定义组件绑定了 click事件处理函数,但是自定义组件本身并没有提供click事件,所以绑定无效,

那么为什么在常规组件中 ,如 view 可以呢,这是因为官方已经为这些常规组件封装好了 click事件,所以可以直接绑,而自定义组件并没有封装,所以即使绑定了也无法实现

  • 解决

在自定义组件中,我们可以为最外层组件容器 view 绑定一个click事件(原理:使用官方组件封装的click点击事件判断触发)

图片.png

并在该事件绑定函数中使用this.$emit调用父组件绑定函数

<!-- 搜索框容器 -->
    <view class="search-container" :style="{'background-color': bgcolor}" v-on:click="searchBoxHander">
      ······
   </view>
 // 搜索框click事件
      searchBoxHander() {
        console.log('~~~~~')
        this.$emit('click')
      },

四、导航跳转和吸顶效果

4.1 导航跳转

  • 创建搜索(search) 页面(在分包中创建)
    图片.png
  • 在组件绑定函数gotosearch 跳转到编程时跳转页面
    // 搜索框click事件
      gotosearch(){
        uni.navigateTo({
          url: '/subpackages/search/search'
        })
      },

效果:

24.gif

4.2 吸顶效果

  • 吸顶效果:保持顶部,不随滑动消失而消失

在分类页面由于整个 UI结构高度并没有 超出页面(滑动高度 + 搜索框高度 = 可用高度),所以不需要配置吸顶效果,这里配置首页

首页配置

  • UI结构
<!-- 自定义组件 -->
    <view class="search-box">
      <my-search v-on:"gotosearch"></my-search>
    </view>
  • 跳转页面时间处理函数
 // 跳转到自定义导航页面
      gotosearch(){
        uni.navigateTo({
          url:'/subpackages/search/search'
        })
  • 通过样式实现吸顶效果(重要)
 .search-box {
    position: sticky; // sticky 粘性的
    // 保持顶部
    top: 0;
    // 提高层级,避免被轮播图覆盖
    z-index: 999;
  }

效果:

25.gif

个人总结(选读*)

一下只是个人的学习总结拙见,写得不好还请海涵。

由于我是半路出家,只学了一点html,css, 就直接学原生小程序,再到uni-app,所以基础不好,在面对原生小程序中遇到 bindtap,bindchange,这些事件处理函数有点懵,下意识当作一种函数,但实际上直接再组件中使用是官方封装好的,原本模样应该是 bind:tap = “函数名”, 这里的bind 是绑定事件的意思,而事件则是 tap(自定义名字),在官方组件内部已经封装好了事件,所以在后面学 父组件与子组件通信时候,我还在纳闷, bind: sync = ”函数名字“, 为啥说是自定义事件 bind:sync,且在子组件内使用 this.triggerEvent(触发事件),就是触发该组件的事件sync(且可以传参),在uni-app则是以this.emit触发事件。例如click,在官方组件应该是判断是否点击如果点击则调用’this.$emit’触发事件函数

综上要实现对自定义组件绑定click事件,可在自定义组件结构中最外层容器绑定click事件,使用官方封装好的事件处理,然后在click事件所绑定函数中this.$emit调用父组件调用函数

图片.png

图片.png

✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨


相关文章
|
27天前
|
前端开发 搜索推荐 开发者
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。
62 12
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
|
23天前
|
UED
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
本篇将带你实现一个自定义评分星级组件,用户可以通过点击星星进行评分,并实时显示评分结果。为了让界面更具吸引力,我们还将添加一只小猫图片作为评分的背景装饰。
63 6
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。
44 7
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。
45 6
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
35 5
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
|
14天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
14天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
15天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
1月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
32 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
333 3