仿写小米lite小程序首页搜索栏效果

前端 2021-01-12 1210

看到小米的商城小程序的搜索栏效果,觉得不错,就想移植到我的小程序上,自己写了一下,效果不是很好,上拉时,搜索框可以伸长,但是下拉时,搜索框的缩放总是出现问题。

百度了一圈,只发现了安卓的效果,不知道为什么web端一个都没有,研究了一下安卓的代码,其实发现并不难!

先放出安卓的代码:

https://github.com/cuiwenju2017/JingDongSearchBar/blob/master/app/src/main/java/com/dy/jingdongsearchbar/MainActivity.java

下面是我改写的代码:

<scroll-view hidden="{{showPage}}" scroll-y style="height:100vh" bindscroll="scroll">
  <view>
</view>
</scroll-view>



js部分
  onLoad: function (options) {
    const res = wx.getSystemInfoSync(); // 获取屏幕宽度
    this.windowHeight = res.windowHeight; // 视口高度
    this.windowWidth = res.windowWidth; // 视口宽度
    this.searchInputWidth = this.windowWidth * 0.45; // 搜索框原始宽度,也是最小宽度
    this.searchInputMaxWidth = this.searchInputWidth + 50; // 搜索框最大宽度
    this.setData({ // 设置search框宽度
      searchInputWidth: this.searchInputWidth
    })
  },

scroll(e) { // 页面滚动
    const {
      scrollLeft,
      scrollTop,
      scrollHeight,
      scrollWidth,
      deltaX,
      deltaY
    } = e.detail;
    // 新搜索框宽度 = 最小宽度 + 下拉距离 * 0.3
    let searchLayoutNewWidth = this.searchInputWidth + scrollTop * 0.3;
    //处理布局的边界问题
    // 新搜索框宽度 = 新宽度 < 最小(原始宽度) ? 设置为最小宽度 :否则 新宽度 
    searchLayoutNewWidth = searchLayoutNewWidth < this.searchInputWidth ? this.searchInputWidth : searchLayoutNewWidth;
    if (searchLayoutNewWidth > this.searchInputMaxWidth) { // 新宽度 > 最大宽度
      searchLayoutNewWidth = this.searchInputMaxWidth; // 新宽度 = 最大宽度
    }
    setTimeout(() => { // 防抖
      this.setData({
        searchInputWidth: searchLayoutNewWidth
      })
    }, 10)
  },

效果:

标签:前端

文章评论

评论列表

已有0条评论