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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72393.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決各大瀏覽器中http地址無權限調用麥克風攝像頭問題(包括谷歌,Edge,360,火狐)后續會陸續補充

項目場景: 在各大瀏覽器中http地址調用電腦麥克風攝像頭會沒有權限,http協議無法使用多媒體設備 原因分析: 為了用戶的隱私安全,http協議無法使用多媒體設備。因為像攝像頭和麥克風屬于可能涉及重大隱私問題的API,ge…

網絡安全蜜罐產品研究現狀

🍅 點擊文末小卡片 ,免費獲取網絡安全全套資料,資料在手,漲薪更快 一、知識點總結 1、蜜罐(Honeypot):誘捕攻擊者的一個陷阱。 2、蜜網(Honeynet):采用了技術…

el-card 結合 el-descriptions 作為信息展示

記錄下el-card 組合 el-descriptions 實現動態展示信息 文章結構 實現效果1. el-descriptions 組件使用1.1 結合v-for實現列表渲染1.2 解析 2. 自定義 el-descriptions 樣式2.1 修改背景色、字體顏色2.2 調整字體大小2.3 解析 3. el-card 結合 el-descriptions 作為信息展示3.…

【Java---數據結構】鏈表 LinkedList

1. 鏈表的概念 鏈表用于存儲一系列元素,由一系列節點組成,每個節點包含兩部分:數據域和指針域。 數據域:用于存儲數據元素 指針域:用于指向下一個節點的地址,通過指針將各個節點連接在一起,形…

python-leetcode-不同的二叉搜索樹 II

95. 不同的二叉搜索樹 II - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class S…

動態規劃/貪心算法

一、動態規劃 動態規劃 是一種用于解決優化問題的算法設計技術,尤其適用于具有重疊子問題和最優子結構性質的問題。它通過將復雜問題分解為更簡單的子問題,并保存這些子問題的解以避免重復計算,從而提高效率。 動態規劃的核心思想 最優子結…

2月28日,三極管測量,水利-51單片機

眾所周知,三極管(BJT)有三個管腳,基極(B)、集電極(C)、發射極(E),在實際應用中,不可避免地會遇到引腳辨別的問題。接下來就講下三極管…

Linux常見基本指令(二)

目錄 1、Linux基礎指令 文本查看 cat指令 more指令 less指令 head指令&tail指令 時間相關指令 查找、搜索相關指令 find指令 which指令 whereis指令 alias指令 grep指令 打包壓縮和解壓縮 zip指令(壓縮) unzip(解壓&…

Day 55 卡瑪筆記

這是基于代碼隨想錄的每日打卡 所有可達路徑 題目描述 ? 給定一個有 n 個節點的有向無環圖,節點編號從 1 到 n。請編寫一個函數,找出并返回所有從節點 1 到節點 n 的路徑。每條路徑應以節點編號的列表形式表示。 輸入描述 ? 第一行包含兩個整數…

2. 在后端代碼中加入日志記錄模塊

1. 說明 日志模塊基本上是每一個軟件系統開發中必不可少的,主要用于持久記錄一些代碼運行中的輸出信息,輔助編碼人員進行代碼調試,以及后期軟件上線運行報錯分析。在Python中加入日志模塊比較簡單,只需要借助logging和RotatingFi…

【Vue3】淺談setup語法糖

Vue3 的 setup 語法糖是通過 <script setup> 標簽啟用的特性&#xff0c;它是對 Composition API 的進一步封裝&#xff0c;旨在簡化組件的聲明式寫法&#xff0c;同時保留 Composition API 的邏輯組織能力。以下是其核心概念和原理分析&#xff1a; 一、<script setu…

物聯網小范圍高精度GPS使用

在園區內實現小范圍高精度GPS&#xff08;全球定位系統&#xff09;定位&#xff0c;通常需要結合多種技術來彌補傳統GPS在精度和覆蓋范圍上的不足。以下是實現小范圍高精度GPS定位的解決方案&#xff0c;包括技術選擇、系統設計和應用場景。 一、技術選擇 在園區內實現高精度…

【前端】前端設計中的響應式設計詳解

文章目錄 前言一、響應式設計的定義與作用二、響應式設計的原則三、響應式設計的實現四、響應式設計的最佳實踐總結 前言 在當今數字化時代&#xff0c;網站和應用程序需要適應各種設備&#xff0c;從桌面電腦到平板電腦和手機。響應式設計應運而生&#xff0c;成為一種可以適…

Rocky Linux 系統安裝 typecho 個人博客系統(Docker 方式)

typecho 博客系統安裝 官網: https://typecho.org/ 1. 安裝 Docker curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo && yum install docker-ce -y && docker -v && systemctl enable --now docker…

pytorch-gpu版本安裝(英偉達gpu驅動安裝)

一、安裝cuda 1?? 檢查是否有 GPU lspci | grep -i nvidia如果沒有輸出&#xff0c;可能你的服務器 沒有 GPU&#xff0c;或者 GPU 未正確識別。 2?? 檢查 NVIDIA 驅動是否安裝 dpkg -l | grep -i nvidia如果沒有相關輸出&#xff0c;說明驅動未安裝&#xff0c;建議安…

華為OD-2024年E卷-分批薩[100分]

文章目錄 題目描述輸入描述輸出描述用例1解題思路Python3源碼 題目描述 吃貨"和"饞嘴"兩人到披薩店點了一份鐵盤&#xff08;圓形&#xff09;披薩&#xff0c;并囑咐店員將披薩按放射狀切成大小相同的偶數個小塊。但是粗心的服務員將披薩切成了每塊大小都完全不…

【計算機網絡入門】初學計算機網絡(六)

目錄 1.回憶數據鏈路層作用 2. 組幀 2.1 四種組幀方法 2.1.1 字符計數法 2.1.2 字節填充法 2.1.3 零比特填充法 2.1.4 違規編碼法 3. 差錯控制 3.1 檢錯編碼 3.1.1 奇偶校驗碼 3.1.2 CRC&#xff08;循環冗余校驗&#xff09;校驗碼 3.2 糾錯編碼 3.2.1 海明校驗碼…

yolo位姿估計實驗

目錄 介紹實驗過程 2.1 數據集下載 2.2 模型和數據配置文件修改 2.3 模型訓練參考鏈接 1. 介紹 1.1 簡介 YOLOv8-Pose是基于YOLOv4算法的姿勢估計模型&#xff0c;旨在實現實時高效的人體姿勢估計。姿勢估計在計算機視覺領域具有重要意義&#xff0c;可廣泛應用于視頻監控、…

極簡Redis速成學習

redis是什么&#xff1f; 是一種以鍵值對形式存儲的數據庫&#xff0c;特點是基于內存存儲&#xff0c;讀寫快&#xff0c;性能高&#xff0c;常用于緩存、消息隊列等應用情境 redis的五種數據類型是什么&#xff1f; 分別是String、Hash、List、Set和Zset&#xff08;操作命…

大語言模型學習--本地部署DeepSeek

本地部署一個DeepSeek大語言模型 研究學習一下。 本地快速部署大模型的一個工具 先根據操作系統版本下載Ollama客戶端 1.Ollama安裝 ollama是一個開源的大型語言模型&#xff08;LLM&#xff09;本地化部署與管理工具&#xff0c;旨在簡化在本地計算機上運行和管理大語言模型…