微信小程序Skyline搜索框吸顶到navtab胶囊位置,丝滑Q弹动画

进入下面小程序可以体验效果

基于官方原版demo加入了回弹动画

WXML:

<scroll-viewclass="scroll-area"type="custom"scroll-yshow-scrollbar="{{false}}"worklet:onscrollend="handleScrollEnd"worklet:onscrollupdate="handleScrollUpdate"
><view class="fake-nav-bar" /><sticky-section push-pinned-header="{{false}}"><sticky-header><view class="search-container"><view class="search"><view class="search-icon-wrp"><image class="search-icon" src="/assets/image/search.png" /></view><view class="search-text">搜索</view><view class="search-btn">搜索</view></view></view></sticky-header><view>1211111111111111111111111111111111</view><view>1211111111111111111111111111111111</view></sticky-section>
</scroll-view>

js:


const app = getApp() //这段代码需要放在page页面JS的最顶部
const systemInfo = wx.getSystemInfoSync()const { shared, Easing,spring ,timing,sequence,delay} = wx.workletconst lerp = function (begin, end, t) {'worklet'return begin + (end - begin) * t
}const clamp = function (cur, lowerBound, upperBound) {'worklet'if (cur > upperBound) return upperBoundif (cur < lowerBound) return lowerBoundreturn cur
}Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.saftPadding = shared(0)this.searchBarheight = shared(0)this.searchBarWidth = shared(100)this.searchBarLeft = shared(0)this.navBarOpactiy = shared(1)this.isTop = shared(false) //是否触顶了this.isBottom = shared(false) //是否触底了this.isExc = shared(false) //是否执行动画了this.isScrolling = shared(false) //是否正在滑动},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {this.applyAnimatedStyle('.nav-bar', () => {'worklet'return {opacity: this.navBarOpactiy.value}})this.applyAnimatedStyle('.search', () => {'worklet'return {width: `${this.searchBarWidth.value}%`,left: `${this.searchBarLeft.value}%`,height: `${this.searchBarheight.value}px`}})this.applyAnimatedStyle('.search-container', () => {'worklet'return {backgroundColor: (this.navBarOpactiy.value > 0) ? 'transparent' : '#fff',paddingTop: `${this.saftPadding.value}px`}})wx.nextTick(()=>{//胶囊顶部位置(安全位置)this.saftPadding.value = app.globalData.menu.top// //胶囊高度this.searchBarheight.value = app.globalData.menu.height})},handleScrollUpdate(evt) {'worklet'const maxDistance = 60const scrollTop = clamp(evt.detail.scrollTop, 0, maxDistance)const progress = scrollTop / maxDistanceconst EasingFn = Easing.cubicBezier(0.4, 0.0, 0.2, 1.0)this.searchBarLeft.value = lerp(0, 25, EasingFn(progress))this.navBarOpactiy.value = lerp(1, 0, progress)const t1= lerp(100, 45, EasingFn(progress))if(t1>45&&t1<100){this.isScrolling.value=true}if((t1>45&&t1<100)&&(!this.isExc.value||this.isScrolling.value)){this.searchBarWidth.value = t1-1.5}if(t1===45&&evt.detail.scrollTop>60&&!this.isTop.value){//靠顶了this.isTop.value=truethis.isBottom.value=falsethis.searchBarWidth.value = t1-2this.searchBarWidth.value = spring(t1)this.isExc.value=truethis.isScrolling.value=false}else if(t1===100&&evt.detail.scrollTop<2&&!this.isBottom.value){//靠底了this.isBottom.value=truethis.isTop.value=falsethis.searchBarWidth.value = t1-2this.searchBarWidth.value = spring(t1)this.isExc.value=truethis.isScrolling.value=false}},handleScrollEnd(evt){'worklet'this.isScrolling.value=falsethis.isExc.value=false},
/*** 生命周期函数--监听页面显示*/onShow(){},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

WXSS: 

.fake-nav-bar {height: 60px;}.search-container {padding: 0 16px 10px 16px;}.search {display: flex;flex-direction: row;box-sizing: border-box;width: 100%;height: 40px;border-radius: 20px;border: 2px solid #07c160;position: relative;align-items: center;background-color: #fff;}.search-text {color: #8f8888;font-size: 14px;}.search-icon-wrp {display: flex;width: 30px;height: 100%;flex-direction: row;align-items: center;justify-content: center;}.search-icon {width: 16px;height: 16px;}.search-btn {position: absolute;right: 0;width: 60px;height: 100%;border-radius: 20px;background-color: #07c160;display: flex;align-items: center;justify-content: center;color: #FFF;font-size: 16px;/* font-weight: bold; */}.nav-bar {background-color: #fff;position: absolute;}.nav-left {display: flex;flex-direction: row;align-items: center;}.nav-logo {width: 40px;height: 40px;border-radius: 50%;}.nav-title {margin-left: 2px;font-size: 20px;color: #3f3e3e;/* font-weight: bold; */}.scroll-area {height: 100vh;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564661.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正弦实时数据库(SinRTDB)简介

正弦实时数据库是长沙巨松软件科技有限公司为了解决工业传感器产生的海量数值型数据的存储、计算等需求而研发的产品。广泛应用于电力、冶金、石油、化工、燃气等多个领域。 正弦实时数据库的主要特点如下&#xff1a; 性能 单机支持管理一百万标签点。单机支持并发用户数超…

【教学类-50-01】20240324 “逻辑思维-得到APP”题目《七位考生上场排序》

作品展示&#xff1a; 背景需求&#xff1a; 2024年3月22日得到发布一道测试题&#xff0c;作为报名入门题&#xff08;营销题&#xff09; 母亲是逻辑思维得到APP的用户&#xff0c;她让我动脑做一下 我觉得可以用python写个代码做一下 通过排除法&#xff0c;获得72种符合问…

C++之移动语义与智能指针

目录 移动语义 1、几个基本概念的理解 2、复制控制语义的函数 3、移动控制语义的函数 3.1、移动构造函数: 3.2、移动赋值函数 4.区别 5、std::move函数 6.代码演示: 资源管理与智能指针 一、C语言中的问题 二、C的解决办法(RAII技术)&#xff1a; 三、四种智能指针…

就业班 第二阶段 2401--3.19 day4 主从复制

一、MySQL-Replication&#xff08;主从复制&#xff09; 1.1、MySQL Replication 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;…

【项目设计】基于MVC的负载均衡式的在线OJ

项目代码&#xff08;可直接下载运行&#xff09; 一、项目的相关背景 学习编程的小伙伴&#xff0c;大家对力扣、牛客或其他在线编程的网站一定都不陌生&#xff0c;这些编程网站除了提供了在线编程&#xff0c;还有其他的一些功能。我们这个项目只是做出能够在线编程的功能。…

Priority Queue实现栈和队列

在排序算法中&#xff0c;堆排序利用了完全二叉树形式的堆结构&#xff0c;结合了插入排序与合并排序的优点&#xff0c;能够以 O ( n log ⁡ n ) O(n\log{n}) O(nlogn)的时间完成排序。优先级队列是可基于堆结构进行实现的一种数据结构&#xff0c;在计算机系统中可以用来记录…

[AIGC] SQL中的数据添加和操作:数据类型介绍

SQL&#xff08;结构化查询语言&#xff09;作为一种强大的数据库查询和操作工具&#xff0c;它能够完成从简单查询到复杂数据操作的各种任务。在这篇文章中&#xff0c;我们主要讨论如何在SQL中添加&#xff08;插入&#xff09;数据&#xff0c;以及在数据操作过程中&#xf…

安装MQTTfx,并且模拟MQTT订阅发布

&#xff08;一&#xff09;软件安装 下面给出了mqttfx官网的链接&#xff0c;可以使用官网进行下载软件&#xff0c;不过因为一些可知的原因&#xff0c;可能无法打开&#xff0c;那么你可以使用我提供的百度网盘进行下载安装。 官网链接&#xff1a;Softblade GmbH - Home …

h5增强表单---数据列表和属性

h5增强表单---数据列表 下拉列表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

Agent Workflows(智能体工作流)

1.目前使用LLM的方式 目前&#xff0c;我们主要在零样本模式下使用大型语言模型&#xff08;LLM&#xff09;&#xff0c;通过提供提示&#xff08;prompt&#xff09;&#xff0c;模型逐词&#xff08;token&#xff09;地构建最终的输出内容&#xff0c;其间并未实施任何操作…

【新手教程】mmselfsup训练教程及常见报错处理

mmselfsup教程 1.安装mmselfsup2.了解文件结构与配置3.训练常见报错1.报错&#xff1a;FileNotFoundError: [Errno 2] No such file or directory:data/imagenet/train/./train/n04311004/images/n04311004_194.JPEG2.报错&#xff1a;报错ImportError: /mmcv/_ext.cpython-38-…

IT运维服务规范标准与实施细则

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求&#xff0c;包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件&#xff0c…