96SEO 2026-02-20 04:37 0
文章前言一、实现原理分析二、API简单回顾三、规避和限制移动范围四、窗口宽高、状态栏高度、底部规避区域高度获取1、窗口宽高获取2、状态栏高度获取2、底部规避区域高度获取

ps为演示作用这边和后续代码例子随便用回到顶部图标来做演示实际可自定义替换
1、布局方面使用Stack容器让悬浮按钮堆叠在页面之上通过postion属性x,y设置悬浮按钮位置x,y为相对页面左上角距离
2、事件处理在移动过程中通过监听touch事件获取手指在屏幕上位置与初始触摸点位置比较计算悬浮按钮的偏移量动态更新悬浮按钮x,y值。
名称描述Down手指按下时触发。
Up手指抬起时触发。
Move手指按压态在屏幕上移动时触发。
名称描述type触摸事件的类型windowX触摸点相对于应用窗口左上角的X坐标。
windowY触摸点相对于应用窗口左上角的Y坐标。
说明以x轴为例计算两个触摸点(A、B)水平方向距离只需B.windowX-A.windowX而在我们实现悬浮按钮处理过程中这个A点就是手指刚按下去触摸点的windowXB点就是移动过程中触摸点的windowX在移动过程中不断计算这个差值后更新悬浮按钮坐标就能让其跟着手指移动。
当然在这个过程中还需要考虑悬浮按钮移出屏幕情况需要规避和限制。
假设悬浮按钮半径为R窗口宽为winWidth、窗口高winHeight状态栏高statusHeight,底部规避区域高bottomHeight
y最大值winHeight-2R-statusHeight-bottomHeight
~winHeight-2R-statusHeight-bottomHeight
.....window.getLastWindow(getContext(this),
windowClass.getWindowProperties()this.winWidth
px2vp(windowProperties.windowRect.width)this.winHeight
px2vp(windowProperties.windowRect.height)}})2、状态栏高度获取
.....window.getLastWindow(getContext(this),
px2vp(windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height)}})2、底部规避区域高度获取
window.getLastWindow(getContext(this),
{//获取手机底部规避区域高度this.bottomAvoidAreaHeight
px2vp(windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height)}})ps:需要注意的是上述获取到的宽高单位都是px需要统一转成vp单位方便和windowXY进行计算
{this.getWindowInfo()}//获取窗口尺寸信息getWindowInfo()
{window.getLastWindow(getContext(this),
px2vp(windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height)//获取手机底部规避区域高度this.bottomAvoidAreaHeight
px2vp(windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height)//获取窗口宽高let
windowClass.getWindowProperties()this.winWidth
px2vp(windowProperties.windowRect.width)this.winHeight
px2vp(windowProperties.windowRect.height)//设置初始位置位于屏幕右下角演示设置可根据实际调整this.curLeftthis.winWidth*0.8this.curTopthis.winHeight*0.8}})}build()
{Column(){//页面内容}.width(100%).height(100%)//悬浮按钮Row()
{Image($r(app.media.top)).width(25)}.width(this.radius
2).justifyContent(FlexAlign.Center).borderRadius(this.radius).backgroundColor(#E8E8E8).position({x:
event.touches[0].windowXthis.startY
event.touches[0].windowYthis.startLeft
event.touches[0]//计算悬浮球与左边距离x坐标
当前悬浮球距离左边开始位置(x轴)当前触摸点x坐标-开始移动触摸点x坐标let
this.startX)//限制悬浮球不能移除屏幕左边curLeft
curLeft)//限制悬浮球不能移除屏幕右边this.curLeft
当前悬浮球距离顶部开始位置(y轴)当前触摸点y坐标-开始移动触摸点y坐标let
this.startY)//限制悬浮球不能移除屏幕上边curTop
curTop)//限制悬浮球不能移除屏幕下边this.curTop
curTop)}})}.width(100%).height(100%).backgroundColor(#f2f2f2)}
如果是想实现悬浮窗原理也一样只不过把悬浮按钮半径计算拆开为x,y2个方向根据悬浮窗宽高替换带入计算即可。
如果想实现不可移动悬浮按钮类似案例中回到顶部固定在页面右下角只需要把触摸事件去掉即可。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback