zoukankan      html  css  js  c++  java
  • 微信小程序使用weui构建搜索栏(searchbar)+导航(navbar)

    首先需要在lib目录中添加weui.wxss。searchbar和navbar结合主要解决两者的层次问题,即搜索框输入时,下方的检索结果能够覆盖住navbar。下面就开始发码啦:

    (1)wxml部分:

    <view class="page">
        <view>
          <view class="page__bd">
            <view class="weui-search-bar">
                <view class="weui-search-bar__form">
                    <view class="weui-search-bar__box">
                        <icon class="weui-icon-search_in-box" type="search" size="14"></icon>
                        <input type="text" class="weui-search-bar__input" placeholder="搜索" value="{{inputVal}}" focus="{{inputShowed}}" bindinput="inputTyping" />
                        <view class="weui-icon-clear" wx:if="{{inputVal.length > 0}}" bindtap="clearInput">
                            <icon type="clear" size="14"></icon>
                        </view>
                    </view>
                    <label class="weui-search-bar__label" hidden="{{inputShowed}}" bindtap="showInput">
                        <icon class="weui-icon-search" type="search" size="14"></icon>
                        <view class="weui-search-bar__text">搜索</view>
                    </label>
                </view>
                <view class="weui-search-bar__cancel-btn" hidden="{{!inputShowed}}" bindtap="hideInput">取消
                </view>
            </view>
            <view class="weui-cells searchbar-result searchBarCss" wx:if="{{inputVal.length > 0}}">
              <!-- 搜索列表 -->
              <view class="weui-cell__bd" wx:for="{{list}}" wx:key="key">
                <navigator url="" class="weui-cell" hover-class="weui-cell_active" data-id='{{item.id}}' data-name='{{item.name}}' bindtap='btn_name'>
                    <view class="weui-cell__bd">
                        <view>{{item.name}}</view>
                    </view>
                </navigator>
              </view>
            </view> 
        </view>
        </view>
        <view class="page__bd">
            <view class="weui-tab">
                <view class="weui-navbar contentCss">
                    <block wx:for="{{tabs}}" wx:key="*this">
                        <view id="{{index}}" class="weui-navbar__item {{activeIndex == index ? 'weui-bar__item_on' : ''}}" bindtap="tabClick">
                            <view class="weui-navbar__title">{{item}}</view>
                        </view>
                    </block>
                    <view class="weui-navbar__slider" style="left: {{sliderLeft}}px; transform: translateX({{sliderOffset}}px); -webkit-transform: translateX({{sliderOffset}}px);"></view>
                </view>
                <view class="weui-tab__panel">
                    <view class="weui-tab__content" hidden="{{activeIndex != 0}}">
                     
                    </view>
                    <view class="weui-tab__content" hidden="{{activeIndex != 1}}">选项二的内容</view>
                </view>
            </view>
        </view>
    </view>

    (2)js部分:(注意:注释部分主要是传递到后台做的相应的检索筛选结果,返回值是已经检索完成后的结果集合JsonArray格式)

    var sliderWidth = 96; // 需要设置slider的宽度,用于计算中间位置
    var app = getApp();
    
    Page({
      data: {
        tabs: ["能效看板", "设备看板"],
        activeIndex: 0,
        sliderOffset: 0,
        sliderLeft: 0,
        // 搜索框状态
        inputShowed: true,
        //显示结果view的状态
        viewShowed: false,
        // 搜索框值
        inputVal: "",
        //搜索渲染推荐数据
        list: [],
      },
      onLoad: function () {
        var that = this;
        wx.getSystemInfo({
          success: function (res) {
            that.setData({
              sliderLeft: (res.windowWidth / that.data.tabs.length - sliderWidth) / 2,
              sliderOffset: res.windowWidth / that.data.tabs.length * that.data.activeIndex
            });
          }
        });
      },
      tabClick: function (e) {
        this.setData({
          sliderOffset: e.currentTarget.offsetLeft,
          activeIndex: e.currentTarget.id
        });
      },
      showInput: function () {
        this.setData({
          inputShowed: true
        });
      },
      // 隐藏搜索框样式
      hideInput: function () {
        this.setData({
          inputVal: "",
          inputShowed: false
        });
      },
      // 清除搜索框值
      clearInput: function () {
        this.setData({
          inputVal: ""
        });
      },
      // 键盘抬起事件
      inputTyping: function (e) {
        console.log(e.detail.value)
        var that = this;
        if (e.detail.value == '') {
          return;
        }
        that.setData({
          viewShowed: false,
          inputVal: e.detail.value
        });
    
        /*wx.request({
          url: "*****",
          data: { "openid": "*****", "name": e.detail.value },
          method: 'GET',
          header: {
            'Content-type': 'application/json'
          },
          success: function (res) {
            that.setData({
              list: res.data
            })
          }
        });*/
    //随便写几个单词作为检索后的结果集
    that.setData({ list: [{ "deviceId": "001", "name": "abcaaaaaaaa" }, { "deviceId": "002", "name": "bcdaaaaaaaaa" }, { "deviceId": "003", "name": "cde" }, { "deviceId": "004", "name": "def" }, { "deviceId": "005", "name": "efg" }] }) }, // 获取选中推荐列表中的值 btn_name: function (res) { var that = this; that.hideInput(); console.log('name: ' + res.currentTarget.dataset.name); }, });

    (3)wxss部分:

    @import '../../lib/weui.wxss';
    page,
    .page,
    .page__bd{
        height: 100%; background-color: white;
    }
    .page__bd{
        padding-bottom: 0;
    }
    .weui-tab__content{
        padding-top: 60px;
        text-align: center;
    }
    .searchbar-result{
        margin-top: 0;
        font-size: 14px;
    }
    .searchbar-result:before{
        display: none;
    }
    .weui-cell{
        padding: 12px 15px 12px 35px;
    }
    .searchBarCss{
      position: fixed; width: 100%; background-color: white;z-index: 10;
    }
    .contentCss{
      width:100%; position:fixed;margin-top:100rpx;z-index:1;
    }

                           

  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/qianyou304/p/11912441.html
Copyright © 2011-2022 走看看