效果图


组件结构

为组件设置一个容器,在容器中放置搜索图标、输入框、清除文字按钮和搜索按钮。

<view class='container'><view class='input-wrapper'><image class='search-icon' src='/img/search.png'></image><input placeholder='{{placeholder}}' value='{{inputValue}}' bindinput='handleInput' bindconfirm='handleSearch'bindfocus='inputFocused'></input><view class='close-icon-wrapper' wx:if="{{showCloseIcon}}" bindtap='clearValue'><image class='close-icon' src='/img/close.png' ></image></view><text bindtap='onTap'>搜索</text></view>
</view>

组件样式

container:高度 100 rpx,背景色 #eee,flex 布局。
input-wrapper:高度 80 rpx,背景色 #fff,flex 布局,border-radius: 20rpx。
search-icon:宽高 32 rpx。
input:字体和光标颜色 #000,字体大小 32 rpx。
close-icon-wrapper:宽高 80 rpx,绝对定位。
text:搜索按钮宽 110 rpx,高 65 rpx,绝对定位,左边框 2rpx solid #eee。

.container {background: #eee;height: 100rpx;width: 100%;display: flex;justify-content: center;align-items: center;
}.input-wrapper {display: flex;align-items: center;height: 80rpx;width: 80%;background: #fff;border-radius: 20rpx;
}.input-wrapper .search-icon {margin-left: 20rpx;width: 32rpx;height: 32rpx;
}.input-wrapper input {margin-left: 10rpx;color: #000;font-size: 32rpx;caret-color: #000;width: 60%;
}.input-wrapper .close-icon-wrapper{position: absolute;left: 480rpx;width: 80rpx;height: 80rpx;background:#fff;display: flex;justify-content: center;align-items: center;
}.input-wrapper .close-icon {width: 42rpx;height: 42rpx;
}.input-wrapper text {position: absolute;right: 80rpx;width: 110rpx;height: 65rpx;padding: 0;background: #fff;display: flex;justify-content: center;align-items: center;font-size: 32rpx;border-left: 2rpx solid #eee;
}

组件功能

1. 属性区分

组件的构造器中要注意区分 properties 和 data,properties 中写组件的对外属性,data 写组件的对内属性。在本搜索组件中 placeholder 和 value 从页面传来,所以它们写在 properties 中,控制清除按钮是否出现的 showCloseIcon 要写在 data 中。

properties: {placeholder: {type: String,value: '搜索' // 如果页面不传placeholder,显示“搜索”},inputValue: {type: String}
},
data: {showCloseIcon: false,
},

2.方法设置

事件流程

(1)光标不聚焦,没有任何输入——显示搜索图标、placeholder和搜索按钮。
(2)光标聚焦,没有任何输入——光标闪烁,显示搜索图标、placeholder和搜索按钮。
(3)光标聚焦,有输入——光标闪烁,显示搜索图标、输入文字、清除按钮和搜索按钮。
(4)光标不聚焦,有输入——显示搜索图标、输入文字、清除按钮和搜索按钮。
(5)按回车搜索——清除按钮隐藏。
(6)点击搜索按钮——清除按钮隐藏。

由此可见,需要 input 组件的聚焦和键盘输入事件。

<input placeholder='{{placeholder}}' value='{{inputValue}}' bindinput='handleInput' bindconfirm='handleSearch'bindfocus='inputFocused'>
</input>

inputFocused:如果聚焦时,输入框中有内容,显示 closeIcon;
handleInput:如果输入时没有内容,不显示 closeIcon,有内容,显示 closeIcon 并把值存入 value。
handleSearch:点击回车后,不显示 closeIcon。
triggerEvent:自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事件选项。文档详情

        inputFocused(e) {if (e.detail.value !== '') {this.setData({showCloseIcon: true,});}},handleInput(e) {if (e.detail.value == '') {this.setData({showCloseIcon: false,});} else {this.setData({showCloseIcon: true,});this.triggerEvent('handleInput', {value: e.detail.value});}},handleSearch() { // 点击键盘上的回车,调用此方法this.setData({showCloseIcon: false,});console.log('handleSearch', this.data.inputValue);},
<view class='close-icon-wrapper' wx:if="{{showCloseIcon}}" bindtap='clearValue'><image class='close-icon' src='/img/close.png' ></image>
</view>
<text bindtap='onTap'>搜索</text>

分别为 closeIcon 和 搜索按钮添加点击事件。

        clearValue() {this.triggerEvent('handleInput', {value: ''});this.setData({showCloseIcon: false,});},onTap() {this.setData({showCloseIcon: false,});console.log('onTap', this.data.inputValue);},

组件 json

{"component":true
}

页面 json

工程的名字是 cookbook,这里组件前缀统一为 ck。

{"usingComponents":{"ck-input":"/components/search/index"}
}

页面 wxml

<view class='container'><ck-inputplaceholder='搜你想吃的'inputValue="{{inputValue}}"bind:handleInput="handleInput"></ck-input>
</view>

页面 js

    handleInput(e) {this.setData({inputValue: e.detail.value,});},

结束语

至此,搜索组件已完成初步开发。

从0开发豆果美食小程序——搜索组件相关推荐

  1. 微信小程序搜索组件wxSearch

    微信小程序搜索组件wxSearch wxSearch优雅的微信小程序搜索框 一.功能 支持自定义热门key 支持搜索历史 支持搜索建议 支持搜索历史(记录)缓存 二.使用 1.将wxSearch文件夹 ...

  2. 微信小程序开发(十一)小程序地图组件map

    地图组件顾名思义就是显示我们的地图的,通过经纬度,将位置在地图上显示出来:这里提几个常用属性,更多的可以到官网进行查阅. 属性 longitude:number类型,经度坐标 latitude:num ...

  3. 已知两点坐标如何快速增加其他坐标_从0开发工程测绘大师小程序之坐标正算篇(十一)...

    上一篇我们讲了如何进行实现角度与弧度的互相转化.在该篇中我们会讲解如何进行实现坐标正算的程序. 目录      1.什么是坐标正算 2.代码实现 3.界面展示 侃侃而谈 从该篇开始程序就会慢慢的越往后 ...

  4. 5个受欢迎的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  5. 5个微信小程序UI组件库

    小程序UI组件库 WeUI WXSS iView WeApp Vant Weapp (原ZanUI WeApp) MinUi Wux WeApp 此文仅为便于自己查找 原文链接:https://www ...

  6. 6个最优秀的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  7. 【附源码】计算机毕业设计Python安卓基于安卓的豆果美食APPou9ez(源码+程序+LW+调试部署)

    [附源码]计算机毕业设计Python安卓基于安卓的豆果美食APPou9ez(源码+程序+LW+调试部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: Pytho ...

  8. douchat 4.0 新版发布,助力小程序后台开发

    douchat是什么 douchat(中文名:豆信)是一款专为微信开发而创造的php开源框架,具有简洁.高效.优雅等特点. 新版本功能 douchat V4.0.0版本主要新增了小程序开发支持,具体包 ...

  9. 只需20小时,让0基础的你掌握小程序云开发!这个暑假,约否?

    今天的故事要从小开和小发这对好基友的假期说起...... 没错!他来了,他来了,云开发带着小程序开发夏令营最新情报向我们走来了! 为了让更多的童鞋享受高效率."在云上"掌握小程序开 ...

  10. vue+uni-app商城实战 | 第一篇:从0到1快捷开发一个商城微信小程序,无缝接入OAuth2实现一键授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

最新文章

  1. 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。...
  2. Request.UrlReferrer详解
  3. mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
  4. Spring管理session的一些认识和用法心得
  5. 70+漂亮且极具亲和力的导航菜单设计推荐
  6. Java—TCP与HTTP连接
  7. Codeforces Round #530 (Div. 1) 1098A Sum in the tree
  8. 遍历矩阵每一行穷举_[LeetCode] 566. 重塑矩阵
  9. Unity中提升像素字体清晰度
  10. vue3 @/cli脚手架搭建项目
  11. 一文学会 Prometheus:开源系统监视和警报工具包!
  12. c#利用反射+特性实现简单的实体映射数据库操作类(表与类的映射)
  13. LINQ的基本语法包含如下的8个上下文关键字,这些关键字和具体的说明如下
  14. 韩国人气组合H.O.T所有专辑下载《经典》
  15. MES系统软件体系架构
  16. 规则动词的过去式及发音规则
  17. mysql数据驱动测试_[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
  18. 第二讲 中国古代密码艺术
  19. 微信小程序配置实现中英文国际化语言切换
  20. 如何提高外贸询单转化率

热门文章

  1. android自定义键盘 下划线,TabLayout 自定义下划线
  2. Ubuntu 编译XCB源码
  3. 《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)...
  4. HTML做一个简单的页面(纯html代码)地球专题学习网站
  5. sqli-labs第十三关--十五关
  6. H5 HTML 移动端触摸拖拽drag drop 自定义拖拽样式 使用PointerEvent模拟的拖拽方案
  7. C++的输入、输出与文件
  8. android 手机内存分配,【扫盲贴』关于android手机中RAM(也就是 运行内存)的分配...
  9. 阿尔法蛋机器人tf卡_入手评价科大讯飞阿尔法蛋S阿尔法蛋智能机器人功能优缺点评测...
  10. 浏览器 本地html 图片不显示,浏览网页图片无法显示怎么回事 网页图片显示不出来的解决方法...