微信小程序自定义搜索框(searchbar)

样式截图展示:未输入关键字样式展示
输入关键字后样式展示

功能描述:微信小程序页面需要加入搜索框时,可以直接引用到页面中使用,当用户未输入任何关键字时如第一张图所示,当用户输入要搜索的关键字时如第二张图所示,出现取消文案和清空的icon标识,点击取消文案或者清空的icon标识,都可清空关键字,样式恢复到第一张图所示


实现代码:

(1) searchbar.js

Component({
  properties: {
    placeholder: {
      type: String,
      value: '',
    }
  },
  data: {
    inputValue: ''
  },
  methods: {
    // 用户输入触发
    handleInput: function(e) {
      this.setData({
        inputValue: e.detail.value
      })
    },
    // 点击清空输入框icon
    handleDeleteClick: function() {
      this.setData({
        inputValue: ''
      })
    },
    // 点击取消触发
    handleTextbtnClick() {
      // 触发父组件中的方法
      this.setData({
        inputValue: ''
      })
    },
    // 用户点击确定触发
    handleConfirm() {
      this.triggerEvent('handleSearch', this.data.inputValue)
    }
  }
})

(2) searchbar.json

{
  "component": true
}

(3) searchbar.wxml

<view class="searchbar">
  <view class="content">
    <image src="../../assets/images/search.png" class="search-icon"></image>
    <input 
      bindinput="handleInput"
      bindconfirm="handleConfirm"
      type="text"
      value="{{inputValue}}" 
      placeholder="{{placeholder}}" 
      class="input"
      confirm-type="search"
    ></input>
    <image
     wx:if="{{inputValue}}" 
     bindtap="handleDeleteClick"
     src="../../assets/images/delete-circle.png" 
     class="delete-icon"
    ></image>
  </view>
  <view wx:if="{{inputValue}}" bindtap="handleTextbtnClick" class="text-btn">取消</view>
</view>

(4) searchbar.wxss

.searchbar {
  height: 88rpx;
  padding: 20rpx 30rpx;
  display: flex;
}
.content {
  height: 88rpx;
  padding: 0 18rpx;
  background: rgba(255,255,255,1);
  border-radius: 16rpx;
  border: 2rpx solid rgba(220,222,226,1);
  flex: 1;
  display: flex;
  align-items: center;
}
.search-icon {
  width: 34rpx;
  height: 34rpx;
  margin-bottom: -4rpx;
}
.input {
  flex: 1;
  margin: 0 20rpx;
}
.delete-icon {
  width: 40rpx;
  height: 40rpx;
}
.text-btn {
  margin-left: 24rpx;
  height: 88rpx;
  line-height: 88rpx;
  font-size: 32rpx;
  font-family: PingFangSC;
  font-weight: 400;
  color: rgba(21,96,220,1);
}

使用方法:(假如在index的页面中使用searchbar组件)
(1)在index.json文件中引入搜索组件searchbar

{
  "usingComponents": {
    "searchbar": "../../components/searchbar/searchbar"
  }
}

(2) 在index.wxml文件中

<searchbar
  placeholder="请输入关键字"
  bind:handleSearch="handleSearch"
></searchbar>

总结: 以上就是自定义searchbar组件的实现及使用方法,如果样式或者用户的交互有不同,可以直接在代码中做扩展。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐