溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

美食菜譜類微信小程序的搜索組件怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-03-11 10:52:17 來源:億速云 閱讀:143 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了美食菜譜類微信小程序的搜索組件怎么實(shí)現(xiàn)的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇美食菜譜類微信小程序的搜索組件怎么實(shí)現(xiàn)文章都會(huì)有所收獲,下面我們一起來看看吧。

1組件結(jié)構(gòu)

為組件設(shè)置一個(gè)容器,在容器中放置搜索圖標(biāo)、輸入框、清除文字按鈕和搜索按鈕。

<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>

2組件樣式

container:高度 100 rpx,背景色 #eee,flex 布局。

input-wrapper:高度 80 rpx,背景色 #fff,flex 布局,border-radius: 20rpx。

search-icon:寬高 32 rpx。

input:字體和光標(biāo)顏色 #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;
}

3組件功能

1. 屬性區(qū)分

組件的構(gòu)造器中要注意區(qū)分 properties 和 data,properties 中寫組件的對外屬性,data 寫組件的對內(nèi)屬性。在本搜索組件中 placeholder 和 value 從頁面?zhèn)鱽?,所以它們寫?properties 中,控制清除按鈕是否出現(xiàn)的 showCloseIcon 要寫在 data 中。

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

2.方法設(shè)置

事件流程

(1)光標(biāo)不聚焦,沒有任何輸入&mdash;&mdash;顯示搜索圖標(biāo)、placeholder和搜索按鈕。

(2)光標(biāo)聚焦,沒有任何輸入&mdash;&mdash;光標(biāo)閃爍,顯示搜索圖標(biāo)、placeholder和搜索按鈕。

(3)光標(biāo)聚焦,有輸入&mdash;&mdash;光標(biāo)閃爍,顯示搜索圖標(biāo)、輸入文字、清除按鈕和搜索按鈕。

(4)光標(biāo)不聚焦,有輸入&mdash;&mdash;顯示搜索圖標(biāo)、輸入文字、清除按鈕和搜索按鈕。

(5)按回車搜索&mdash;&mdash;清除按鈕隱藏。

(6)點(diǎn)擊搜索按鈕&mdash;&mdash;清除按鈕隱藏。

由此可見,需要 input 組件的聚焦和鍵盤輸入事件。

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

inputFocused:如果聚焦時(shí),輸入框中有內(nèi)容,顯示 closeIcon;

handleInput:如果輸入時(shí)沒有內(nèi)容,不顯示 closeIcon,有內(nèi)容,顯示 closeIcon 并把值存入 value。

handleSearch:點(diǎn)擊回車后,不顯示 closeIcon。

triggerEvent:自定義組件觸發(fā)事件時(shí),需要使用 triggerEvent 方法,指定事件名、detail對象和事件選項(xiàng)。 

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() { // 點(diǎn)擊鍵盤上的回車,調(diào)用此方法
            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 和 搜索按鈕添加點(diǎn)擊事件。

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,這里組件前綴統(tǒng)一為 ck。

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

頁面 wxml

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

頁面 js

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

關(guān)于“美食菜譜類微信小程序的搜索組件怎么實(shí)現(xiàn)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“美食菜譜類微信小程序的搜索組件怎么實(shí)現(xiàn)”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI