从0开发豆果美食小程序——搜索组件
效果图
组件结构
为组件设置一个容器,在容器中放置搜索图标、输入框、清除文字按钮和搜索按钮。
<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开发豆果美食小程序——搜索组件相关推荐
- 微信小程序搜索组件wxSearch
微信小程序搜索组件wxSearch wxSearch优雅的微信小程序搜索框 一.功能 支持自定义热门key 支持搜索历史 支持搜索建议 支持搜索历史(记录)缓存 二.使用 1.将wxSearch文件夹 ...
- 微信小程序开发(十一)小程序地图组件map
地图组件顾名思义就是显示我们的地图的,通过经纬度,将位置在地图上显示出来:这里提几个常用属性,更多的可以到官网进行查阅. 属性 longitude:number类型,经度坐标 latitude:num ...
- 已知两点坐标如何快速增加其他坐标_从0开发工程测绘大师小程序之坐标正算篇(十一)...
上一篇我们讲了如何进行实现角度与弧度的互相转化.在该篇中我们会讲解如何进行实现坐标正算的程序. 目录 1.什么是坐标正算 2.代码实现 3.界面展示 侃侃而谈 从该篇开始程序就会慢慢的越往后 ...
- 5个受欢迎的微信小程序UI组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- 5个微信小程序UI组件库
小程序UI组件库 WeUI WXSS iView WeApp Vant Weapp (原ZanUI WeApp) MinUi Wux WeApp 此文仅为便于自己查找 原文链接:https://www ...
- 6个最优秀的微信小程序UI组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- 【附源码】计算机毕业设计Python安卓基于安卓的豆果美食APPou9ez(源码+程序+LW+调试部署)
[附源码]计算机毕业设计Python安卓基于安卓的豆果美食APPou9ez(源码+程序+LW+调试部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: Pytho ...
- douchat 4.0 新版发布,助力小程序后台开发
douchat是什么 douchat(中文名:豆信)是一款专为微信开发而创造的php开源框架,具有简洁.高效.优雅等特点. 新版本功能 douchat V4.0.0版本主要新增了小程序开发支持,具体包 ...
- 只需20小时,让0基础的你掌握小程序云开发!这个暑假,约否?
今天的故事要从小开和小发这对好基友的假期说起...... 没错!他来了,他来了,云开发带着小程序开发夏令营最新情报向我们走来了! 为了让更多的童鞋享受高效率."在云上"掌握小程序开 ...
- vue+uni-app商城实战 | 第一篇:从0到1快捷开发一个商城微信小程序,无缝接入OAuth2实现一键授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...
最新文章
- 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。...
- Request.UrlReferrer详解
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
- Spring管理session的一些认识和用法心得
- 70+漂亮且极具亲和力的导航菜单设计推荐
- Java—TCP与HTTP连接
- Codeforces Round #530 (Div. 1) 1098A Sum in the tree
- 遍历矩阵每一行穷举_[LeetCode] 566. 重塑矩阵
- Unity中提升像素字体清晰度
- vue3 @/cli脚手架搭建项目
- 一文学会 Prometheus:开源系统监视和警报工具包!
- c#利用反射+特性实现简单的实体映射数据库操作类(表与类的映射)
- LINQ的基本语法包含如下的8个上下文关键字,这些关键字和具体的说明如下
- 韩国人气组合H.O.T所有专辑下载《经典》
- MES系统软件体系架构
- 规则动词的过去式及发音规则
- mysql数据驱动测试_[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
- 第二讲 中国古代密码艺术
- 微信小程序配置实现中英文国际化语言切换
- 如何提高外贸询单转化率
热门文章
- android自定义键盘 下划线,TabLayout 自定义下划线
- Ubuntu 编译XCB源码
- 《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)...
- HTML做一个简单的页面(纯html代码)地球专题学习网站
- sqli-labs第十三关--十五关
- H5 HTML 移动端触摸拖拽drag drop 自定义拖拽样式 使用PointerEvent模拟的拖拽方案
- C++的输入、输出与文件
- android 手机内存分配,【扫盲贴』关于android手机中RAM(也就是 运行内存)的分配...
- 阿尔法蛋机器人tf卡_入手评价科大讯飞阿尔法蛋S阿尔法蛋智能机器人功能优缺点评测...
- 浏览器 本地html 图片不显示,浏览网页图片无法显示怎么回事 网页图片显示不出来的解决方法...