微信小程序 顶部搜索框滑动伸缩效果的实现

项目场景:微信小程序顶部搜索框随页面滑动伸缩效果

提示:实现搜索框跟随用户滑动页面,实现伸缩效果

微信小程序 顶部搜索框滑动伸缩动画的实现


实现效果:

滑动前

在这里插入图片描述

滑动后

在这里插入图片描述

实现原理

提示:主要用到了微信小程序的view-scroll bindscroll

1:确定一个控制搜索框伸缩的范围。
2:通过bindscroll事件获取e.detail.scrollTop;即用户滑动的位置
3:计算当前位置占伸缩范围的比例
4:通过滑动的比例。转换成搜索框显示的到顶部距离比例和宽度比例。
5:最后再进行赋值。


代码示例:

### js
data: {
        scHeight: 500,//scroll-view屏幕高度
        pHeight: 0,//padding高度
        topHeight: 0,
        lineHeight: 0,
        Stop: 0,//搜索框距离顶部高度
        Swidth: 710,//搜索框宽度
        menuTop: 0,//胶囊高度
    },
    onScroll(e) {
        let scrollTop = Math.floor(e.detail.scrollTop)
        let headHeight = this.data.topHeight + 60
        if (scrollTop > headHeight) {
            this.setData({
                Stop:this.data.menuTop,
                Swidth:350
            })
        }else{
            console.log(scrollTop+'======'+headHeight);
            let ratio =1-scrollTop / headHeight //滑动的比例
            console.log(ratio);
            let menuTop = this.data.menuTop//胶囊高度
            let curSearchTop=this.data.topHeight//动态获取最大搜索框高度
            let Stop=(curSearchTop-menuTop)*ratio+menuTop//搜索框当前滑动的距离
            let Swidth=(710-350)*ratio+350//搜索框当前的宽度
            this.setData({
                Stop,
                Swidth
            })
        }

    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        let SystemInfo = wx.getSystemInfoSync()
        let pxToRpx = 750 / SystemInfo.windowWidth
        let startHeight = SystemInfo.statusBarHeight * pxToRpx
        let titleHeight = 44 * pxToRpx
        let scHeight = SystemInfo.windowHeight * pxToRpx
        let menuTop = wx.getMenuButtonBoundingClientRect().top * pxToRpx
        this.data.menuTop=menuTop
        this.setData({
            scHeight: scHeight,
            topHeight: startHeight + titleHeight,
            pHeight: startHeight,
            lineHeight: titleHeight,
            Stop: startHeight + titleHeight
        })

    },

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值