当前位置: 首页 > news >正文

水滴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

相关文章:

  • 萌新学 Python 之 random 函数
  • 怎么在本地环境安装yarn包
  • git上传仓库操作
  • Oracle 导出所有表索引的创建语句
  • 防火墙旁挂负载分担组网实验
  • 【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录
  • Zookeeper 的核心引擎:深入解析 ZAB 协议
  • C#-委托
  • Redis7——进阶篇(一)
  • 正浩创新内推:校招、社招EcoFlow社招内推码: FRQU1CY
  • 鸿蒙应用开发入门教程
  • Spring学习——新建module模块
  • 无法创建虚拟机问题
  • Blender调整最佳渲染清晰度
  • wordpress子分类调用父分类名称和链接的3种方法
  • 数字人口播:开启内容创作新时代,实时对话数字人源码环境,可OEM
  • 大模型赋能心脏骤停预测:精准医疗新曙光
  • DeepSeek-V3:AI语言模型的高效训练与推理之路
  • 常见排序算法
  • MySql面试总结(一)
  • 互联网专线做网站怎么做数据/百度搜索网页版
  • 用猴子做标志起网站名叫什么好/黄页88网站推广方案
  • 济南电商网站开发/广州seo培训
  • 金华电子商务网站建设/四川网络推广推广机构
  • 网站制作的地方/seo快速排名代理
  • wordpress缓存清除缓存/企业网站优化解决方案