博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从0开发豆果美食小程序——搜索组件
阅读量:6868 次
发布时间:2019-06-26

本文共 3711 字,大约阅读时间需要 12 分钟。

效果图

图片描述

图片描述

组件结构

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

图片描述

搜索

组件样式

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 组件的聚焦和键盘输入事件。

图片描述

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);        },
搜索

分别为 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

页面 js

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

结束语

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

转载地址:http://sgdfl.baihongyu.com/

你可能感兴趣的文章
单例模式的长处-缺点
查看>>
设计电影类将海报的内容打印出来
查看>>
LeetCode Product of Array Except Self
查看>>
对OpenCV中seamlessClone的初步实验
查看>>
高精度1--加法
查看>>
Python标准库:内置函数all(iterable)
查看>>
Java多线程理解:线程安全的集合对象
查看>>
堆和栈的差别
查看>>
用尽洪荒之力整理的Mysql数据库32条军规(转)
查看>>
两个Web应用必须的Servlet Filter
查看>>
基于Handler架构的录音程序
查看>>
Serf 了解
查看>>
nlp总结
查看>>
MongoDB数据库聚合
查看>>
ffmpeg保存原始数据PCM YUV
查看>>
Spigot 算法之中的一个 计算调和级数的和
查看>>
vue2.0如何自定义全局变量的方法
查看>>
tiny4412 裸机程序 七、重定位代码到DRAM【转】
查看>>
springMVC+json构建restful风格的服务
查看>>
HDU 5317 RGCDQ(素数个数 多校2015啊)
查看>>