水滴tabbar canvas实现思路

废话不多说之间看效果图,只要解决了这个效果水滴tabbar就能做出来了

源码地址
在这里插入图片描述

一、核心实现步骤分解

布局结构搭建

使用 作为绘制容器
设置 width=600, height=200 基础尺寸
通过 JS 动态计算实际尺寸(适配高清屏)

function initCanvas() {
   
  // 获取设备像素比(解决 Retina 屏模糊问题)
  const dpr = window.devicePixelRatio || 1;
  
  // 获取父容器实际显示宽度(CSS像素)
  const containerWidth = canvas.parentElement.clientWidth;
  
  // 设置 Canvas 的 CSS 显示尺寸
  canvas.style.width = containerWidth + 'px'; 
  canvas.style.height = '200px';
  
  // 设置 Canvas 的实际像素尺寸(物理像素)
  canvas.width = containerWidth * dpr;
  canvas.height = 200 * dpr;
  
  // 缩放坐标系(关键步骤!保证绘制内容高清)
  ctx.scale(dpr, dpr);
}

水滴形状绘制

几何分解:水滴 = 左右对称曲线 + 中间半圆
贝塞尔曲线控制点:通过三段三次贝塞尔曲线连接
动态坐标计算:基于 Canvas 宽度动态定位

// 三段贝塞尔曲线参数配置
const curves = {
   
  left: {
     
    P0: {
    x: width - len, y: 0 },         // 左曲线起点
    CP1: {
    x: width - r1 - r2/2, y: 0 },  // 控制点1(水平左移)
    CP2: {
    x: width - r1, y: r2/2 },      // 控制点2(垂直下压)
    P3: {
    x: width - r1, y: r2 }          // 连接中间半圆左端点
  },
  // ... 其他曲线段类似
};

// 路径绘制执行
ctx.beginPath();
ctx.moveTo(0, 0);  // 从左上角开始
ctx.lineTo(curves.left.P0.x, curves.left.P0.y); // 绘制左侧直线

// 绘制左半曲线
ctx.bezierCurveTo(
  curves.left.CP1.x, curves.left.CP1.y,
  curves.left.CP2.x, curves.left.CP2.y

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Redis+Mybatis-plus黑马点评

短信登录 基于Session实现登录 流程: 发送短信验证码-->短信验证码注册登录-->校验登录状态(保存用户到ThreadLocal,方便后续使用) 不能每次请求服务都要进行登录状态校验,解决办法:拦截器 在Sp…

Windows之远程终端问题集锦(十二)

1.描述 远程终端的默认端口是3389 云vps一般会开启 没有启用的情况下,在较高的权限下可以使用注册表命令进行开启 2.注册表开启远程终端命令 2.1 2008 2012 2016 开启3389 这个就是新建.bat文件 在本来不开启的情况下 我们双击运行 他就自动开启了 当然我们必须获…

跟着源码实现LevelDB(二)util/status.cc

概述 本小节实现了leveld的Status类,Status看起来是个简单的类,但是其中也包含了leveldb对极致的性能实现的巧妙设计 Status的内存管理 Status 只有一个成员变量 const char* state_; state[0…3] 表示长度,state[4] 1个字节 表示状态的枚…

【Azure 架构师学习笔记】- Azure Databricks (13) -- 搭建Medallion Architecture part 1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (12) – Medallion Architecture简介 前言 上文已经介绍了关于Medallion的知识,本文开始用ADB 来实现, 但是基于内容较…

模型优化之强化学习(RL)与监督微调(SFT)的区别和联系

强化学习(RL)与监督微调(SFT)是机器学习中两种重要的模型优化方法,它们在目标、数据依赖、应用场景及实现方式上既有联系又有区别。 想了解有关deepseek本地训练的内容可以看我的文章: 本地基于GGUF部署的…

欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、马氏距离理解学习

目录 一、欧氏距离(Euclidean Distance)公式:原理: 二、曼哈顿距离(Manhattan Distance)公式:原理: 三、切比雪夫距离(Chebyshev Distance)公式:原…

计算机三级网络技术备考(3)

【知识点补充:带宽是是链路的传输速率,宽带是一种服务】 第四章:路由设计技术 考点1:IP路由选择与路由汇聚 核心层:s0两个IP进行汇聚就行 汇聚层:聚合后两个以上的往前进几位(因为主机号不够因…

互联网医院实时数据监测智能分析系统设计概述(下)

阶段4:可视化仪表盘与用户界面开发 在这一阶段,我们将使用 Plotly Dash 来设计一个实时预测仪表盘,用于展示疾病传播趋势、医生评估信息等。我们还将实现实时数据更新与展示,确保数据能够及时反映系统中的变化。 1. 设计实时预测仪表盘 步骤 1:安装 Dash 依赖 首先,确…

VMware vSphere数据中心虚拟化——vCenter Server6.7创建配置数据中心集群

VMware vSphere数据中心虚拟化 vCenter Server6.7创建配置数据中心集群前期准备创建配置数据中心集群分配许可证 vCenter Server6.7创建配置数据中心集群 前期准备 已部署完成vCenter7.0集群为vSAN存储和vSphereHA高可用 提前规划好专属网络地址每台物理机至少提供两块硬盘&a…

【算法学习之路】4.简单数论(4)

简单数论(4) 前言三.高精度1.什么是高精度2.解决办法 精度乘除法一.精度乘法1.数据的存储2.步骤3.例题:高精度乘法 二.精度除法1.例子2.步骤3.例题:高精度除法 前言 我会将一些常用的算法以及对应的题单给写完,形成一套…

视频推拉流EasyDSS点播平台云端录像播放异常问题的排查与解决

EasyDSS视频直播点播平台是一个功能全面的系统,提供视频转码、点播、直播、视频推拉流以及H.265视频播放等一站式服务。该平台与RTMP高清摄像头配合使用,能够接收无人机设备的实时视频流,实现无人机视频推流直播和巡检等多种应用。 最近&…

pyQT5简易教程(一):制作一个可以选择本地图片并显示的桌面应用

可以参考之前的教程安装 PyQt 和 PyQt Designer https://blog.csdn.net/smx6666668/article/details/145909326?spm=1011.2415.3001.10575&sharefrom=mp_manage_link 一、打开pycharm中的QTdesigner 二、设计界面 和之前一样,使用 PyQt Designer 来设计界面并保存为 .u…

【洛谷贪心算法】P1090合并果子

为了使消耗的体力最小,每次都应该选择当前重量最小的两堆果子进行合并。可以使用优先队列(小根堆)来实现这个过程,优先队列可以自动维护元素的顺序,每次取出堆顶的两个元素(即最小的两个元素)进…

第四届大数据、区块链与经济管理国际学术会议

重要信息 官网:www.icbbem.com 时间:2025年3月14-16日 地点:中国-武汉 (线上召开) 简介 第四届大数据、区块链与经济管理国际学术会议(ICBBEM 2025),将于2025年3月14-16日在中国湖北省武汉市召开。…

【愚公系列】《Python网络爬虫从入门到精通》037-文件的存取

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

pyside6学习专栏(八):在PySide6中使用matplotlib库绘制三维图形

本代码原来是PySide6官网的一个示例程序,我对其进行的详细的注释,同时增加了一个功能:加载显示cass的地形图坐标数据示例,示例可显示以下几种三维图形 程序运行界面如下: 代码如下: # -*- coding: utf-8 -…

【多模态大模型论文精读】MOSHI:双工实时语音对话大模型

写在前面 大型语言模型(LLM)的飞速发展,让人机对话变得越来越自然流畅。从 Alexa、Siri 到 Google Assistant,语音助手已经成为我们生活中不可或缺的一部分。然而,这些看似智能的对话系统,背后却隐藏着一个…

Elasticsearch --- 相关基础知识整理

目录 1、核心功能2、主要用途3、数据模型4、优势5、映射5.1 映射的作用5.2 字段数据类型5.3 动态映射与显式映射5.4 映射设置5.5 多字段与元字段5.6 映射的创建与管理5.7 映射优化建议 6、 倒排索引6.1 **倒排索引的基本概念**6.2 **倒排索引的工作原理**6.3 **倒排索引的优势*…

lqb官方题单-速成刷题清单(上) - python版

预计3月5日 Wednesday 前完成 【2025年3月1日,记】题目太简单了,3月3日前完成 蓝桥杯速成刷题清单(上) https://www.lanqiao.cn/problems/1216/learning/?problem_list_id30&page1 替换题号1216 目录 进度题解和碎碎念1. 排…

计算机网络——详解TCP三握四挥

文章目录 前言一、三次握手1.1 三次握手流程1.2 tcp为什么需要三次握手建立连接? 二、四次挥手2.1 四次挥手流程2.2 为什么是四次,不是三次?2.3 为什么要等待2msl?2.4 TCP的保活计时器 前言 TCP和UDP是计算机网络结构中运输层的两…