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

Javascript提高:点击处产生渐变随机圆-由Deepseek产生

以下是使用 Canvas 实现“点击页面生成渐变圆”的完整代码。点击任意位置会生成一个径向渐变、半径随机的圆并保留所有已绘制的圆。 html !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0, user-scalableno titleCanvas 幻彩圆点 | 点击生成随机渐变圆/title style * { margin: 0; padding: 0; box-sizing: border-box; user-select: none; /* 避免点击时选中文本 */ } body { background: #1a2a32; overflow: hidden; font-family: Segoe UI, Poppins, system-ui, -apple-system, sans-serif; } canvas { display: block; position: fixed; top: 0; left: 0; width: 100%; height: 100%; cursor: crosshair; background: #f8f9fc; background-image: radial-gradient(circle at 25% 40%, rgba(0,0,0,0.02) 2%, transparent 2.5%), radial-gradient(circle at 75% 85%, rgba(0,0,0,0.015) 1.5%, transparent 2%); background-size: 48px 48px, 32px 32px; transition: background 0.2s ease; } /* 控制面板 - 简洁现代 */ .info-panel { position: fixed; bottom: 20px; left: 20px; right: 20px; background: rgba(30, 35, 45, 0.72); backdrop-filter: blur(12px); border-radius: 56px; padding: 10px 20px; display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px; z-index: 100; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2); border: 1px solid rgba(255, 255, 255, 0.25); font-weight: 500; pointer-events: auto; } .info-text { color: white; font-size: 0.9rem; letter-spacing: 0.5px; background: rgba(0,0,0,0.4); padding: 6px 14px; border-radius: 40px; backdrop-filter: blur(4px); } .info-text span { font-weight: bold; color: #ffd966; } button { background: rgba(255, 255, 255, 0.2); backdrop-filter: blur(4px); border: 1px solid rgba(255,255,240,0.6); color: white; padding: 6px 20px; border-radius: 40px; font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease; font-family: inherit; } button:hover { background: #ff8c42; border-color: white; transform: scale(0.96); box-shadow: 0 4px 12px rgba(0,0,0,0.2); } .counter { background: #1e2a36; color: #ffd966; padding: 5px 14px; border-radius: 36px; font-size: 0.85rem; font-family: monospace; font-weight: bold; } media (max-width: 560px) { .info-panel { padding: 8px 16px; border-radius: 40px; } .info-text { font-size: 0.7rem; } button { padding: 4px 16px; font-size: 0.75rem; } } /style /head body canvas idmagicCanvas/canvas div classinfo-panel div classinfo-text ✨ 点击任意位置 · span径向渐变/span span随机半径/span /div div classcounter idcircleCounter⚪ 圆点数量: 0/div button idclearBtn 清空画布/button /div script (function() { // ----- DOM 元素 ----- const canvas document.getElementById(magicCanvas); const ctx canvas.getContext(2d); const circleCounterSpan document.getElementById(circleCounter); const clearBtn document.getElementById(clearBtn); // ----- 存储所有圆的数据 ----- let circles []; // 每个元素: { x, y, radius, outerColor, innerColor } // ----- 随机工具函数 ----- // 随机整数 [min, max] function randomInt(min, max) { return Math.floor(Math.random() * (max - min 1)) min; } // 随机半径 (20px ~ 130px范围适中视觉丰富) function getRandomRadius() { return randomInt(22, 128); } // 随机生成鲜艳的颜色 (HSL 模式 饱和度65% 亮度65%) // 返回 hsl 字符串也可以作为径向渐变外圈主色 function getRandomVividColor() { const hue Math.floor(Math.random() * 360); // 饱和度 60% ~ 85% 鲜艳但柔和 const saturation randomInt(60, 88); // 亮度 55% ~ 75% 明亮不刺眼 const lightness randomInt(55, 78); return hsl(${hue}, ${saturation}%, ${lightness}%); } // 生成内圈颜色 (亮色/暖白带微透明感让渐变更通透) function getInnerGlowColor() { // 柔白 / 淡金色 / 极浅粉增加层次 const variants [ rgba(255, 255, 245, 0.95), rgba(255, 250, 225, 0.92), rgba(255, 248, 225, 0.96), rgba(250, 245, 235, 0.96), #fff9e8 ]; return variants[Math.floor(Math.random() * variants.length)]; } // 根据圆的参数创建一个径向渐变对象 (基于当前context) function createRadialGradientForCircle(ctx, cx, cy, radius, innerColor, outerColor) { // 径向渐变: 从圆心 (cx,cy) 半径 0 开始到半径 radius 结束 const gradient ctx.createRadialGradient(cx, cy, 0, cx, cy, radius); gradient.addColorStop(0, innerColor); gradient.addColorStop(0.45, innerColor); // 内芯保持通透亮色 gradient.addColorStop(0.78, outerColor); gradient.addColorStop(1, outerColor); return gradient; } // ----- 绘制所有圆 (保留历史不丢失) ----- function drawAllCircles() { if (!ctx) return; // 获取当前canvas的实际像素尺寸 const w canvas.width; const h canvas.height; // 清空画布并填充优雅的背景 (浅色网格质感) ctx.clearRect(0, 0, w, h); // 底色: 温柔米灰 微妙的噪点纹理感(通过径向渐变底纹) const gradBack ctx.createLinearGradient(0, 0, w, h); gradBack.addColorStop(0, #fefaf5); gradBack.addColorStop(1, #f0f2f5); ctx.fillStyle gradBack; ctx.fillRect(0, 0, w, h); // 极浅网格线装饰 (增加精致感) ctx.save(); ctx.globalAlpha 0.2; ctx.beginPath(); ctx.strokeStyle #cbd5e1; ctx.lineWidth 0.5; for (let i 0; i w; i 40) { ctx.beginPath(); ctx.moveTo(i, 0); ctx.lineTo(i, h); ctx.stroke(); ctx.beginPath(); ctx.moveTo(0, i); ctx.lineTo(w, i); ctx.stroke(); } ctx.restore(); // 绘制所有存储的圆 (从旧到新后绘制的在上层视觉无影响) for (let i 0; i circles.length; i) { const circle circles[i]; const { x, y, radius, outerColor, innerColor } circle; // 创建该圆的径向渐变 const gradient createRadialGradientForCircle(ctx, x, y, radius, innerColor, outerColor); ctx.beginPath(); ctx.arc(x, y, radius, 0, Math.PI * 2); ctx.fillStyle gradient; ctx.fill(); // 增加极细高光边缘 (让圆更立体轻微白边) ctx.save(); ctx.globalCompositeOperation lighter; ctx.beginPath(); ctx.arc(x, y, radius - 1, 0, Math.PI * 2); ctx.fillStyle rgba(255, 255, 240, 0.18); ctx.fill(); ctx.restore(); // 小光晕效果 (增强圆质感) ctx.save(); ctx.shadowBlur 0; // 重置阴影避免叠加过多性能 ctx.beginPath(); ctx.arc(x, y, radius * 0.2, 0, Math.PI * 2); ctx.fillStyle rgba(255, 255, 245, 0.4); ctx.fill(); ctx.restore(); } // 更新显示圆的数量 circleCounterSpan.innerHTML ⚪ 圆点数量: ${circles.length}; } // ----- 添加新的圆 (点击位置) ----- function addCircleAtMouse(clientX, clientY) { // 获取canvas相对浏览器视口的实际尺寸和偏移量 const rect canvas.getBoundingClientRect(); const scaleX canvas.width / rect.width; // canvas物理像素与CSS比例 const scaleY canvas.height / rect.height; // 计算 canvas 画布上的实际坐标 (物理像素坐标) let canvasX (clientX - rect.left) * scaleX; let canvasY (clientY - rect.top) * scaleY; // 边界修剪防止超出画布导致渐变异常但不影响绘制但限制坐标在画布内更好 canvasX Math.min(Math.max(0, canvasX), canvas.width); canvasY Math.min(Math.max(0, canvasY), canvas.height); // 随机半径 const radius getRandomRadius(); // 随机外圈颜色鲜艳每次不同 const outerColor getRandomVividColor(); // 内圈柔和亮色 const innerColor getInnerGlowColor(); // 存储圆的信息 circles.push({ x: canvasX, y: canvasY, radius: radius, outerColor: outerColor, innerColor: innerColor }); // 重绘所有圆包括新圆 drawAllCircles(); } // ----- 清空所有圆 ----- function clearAllCircles() { circles []; drawAllCircles(); } // ----- 自适应 canvas 尺寸 (保持高清防止模糊) ----- function resizeCanvas() { const w window.innerWidth; const h window.innerHeight; // 设置 canvas 实际像素尺寸 (避免CSS拉伸模糊) canvas.width w; canvas.height h; // 重置画布样式尺寸 canvas.style.width ${w}px; canvas.style.height ${h}px; // 调整尺寸后必须重绘所有圆 (否则会丢失绘图) drawAllCircles(); } // ----- 窗口大小改变时可选策略保持原有圆的位置相对于新画布坐标不变还是清空 // 为了更自然: 保留已绘制的圆但因为画布大小改变旧圆的坐标依然基于左上角但视觉上会偏移 // 不过保留历史圆可以避免用户意外丢失作品也更有趣。同时由于背景网格适应坐标在逻辑上没变 // 只是窗口变化后圆相对窗口位置变化但用户在缩放后依然能看到之前作品属于预期行为。不强制清空。 // 但为了完美展示不清空保留所有圆并重绘。平滑过渡 function handleResize() { resizeCanvas(); // resizeCanvas 内部已经 drawAllCircles, 因为尺寸重置后原来的坐标是基于绝对坐标 // 画面仅仅是在新的canvas尺寸下重新绘制位置相对于左上角不变。 完美保留。 // (如果希望清空可以调用clearAllCircles但为了用户友好保留) } // ----- 点击canvas事件 (生成圆) ----- function onCanvasClick(e) { let clientX, clientY; if (e.touches) { // 移动端触摸支持 clientX e.touches[0].clientX; clientY e.touches[0].clientY; e.preventDefault(); } else { clientX e.clientX; clientY e.clientY; } addCircleAtMouse(clientX, clientY); } // ----- 移动端支持触摸生成圆 ----- function onCanvasTouch(e) { e.preventDefault(); if (e.touches.length) { const touch e.touches[0]; addCircleAtMouse(touch.clientX, touch.clientY); } } // ----- 初始化事件与尺寸 ----- function init() { resizeCanvas(); // 监听鼠标点击 canvas.addEventListener(click, onCanvasClick); // 触摸屏支持 canvas.addEventListener(touchstart, onCanvasTouch, { passive: false }); // 窗口大小改变 window.addEventListener(resize, () { handleResize(); }); // 清空按钮事件 clearBtn.addEventListener(click, (e) { e.stopPropagation(); clearAllCircles(); }); // 初始演示预置两个示例圆吸引用户展示效果但不干扰体验可选 // 为了让初始画布不单调主动添加2个柔和展示圆可注释但添加后更直观 setTimeout(() { if (circles.length 0) { // 示例圆1: 画布中央偏左 const demoRadius1 64; const demoX1 canvas.width * 0.3; const demoY1 canvas.height * 0.5; circles.push({ x: demoX1, y: demoY1, radius: demoRadius1, outerColor: #f97316, // 暖橙 innerColor: #fff2dd }); // 示例圆2: 右侧区域 const demoRadius2 78; const demoX2 canvas.width * 0.7; const demoY2 canvas.height * 0.65; circles.push({ x: demoX2, y: demoY2, radius: demoRadius2, outerColor: #3b82f6, // 碧蓝 innerColor: #eef5ff }); drawAllCircles(); } }, 100); } // 启动 init(); })(); /script /body /html

相关文章:

Javascript提高:点击处产生渐变随机圆-由Deepseek产生

以下是使用 Canvas 实现“点击页面生成渐变圆”的完整代码。点击任意位置会生成一个径向渐变、半径随机的圆&#xff0c;并保留所有已绘制的圆。 html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta n…...

机器学习数据预处理:数据拆分

机器学习数据预处理&#xff1a;数据拆分&#xff08;超通俗完整版&#xff09; 数据拆分是把数据集分成训练集、验证集、测试集&#xff0c;让模型“学、调、考”分开&#xff0c;是评估模型真实能力的必做步骤&#xff0c;本科/研究生入门必看、面试常考。一、什么是数据拆分…...

如何免费实现城通网盘10倍下载提速:ctfileGet完整使用指南

如何免费实现城通网盘10倍下载提速&#xff1a;ctfileGet完整使用指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘的龟速下载而烦恼吗&#xff1f;每次下载大文件都要等待数小时&…...

科技赋能娱乐:超元力XR无轨黑暗乘骑的技术创新与体验革新

在科技与娱乐深度融合的当下&#xff0c;游乐产品的核心竞争力已从单纯的刺激感&#xff0c;转向沉浸式、互动性与创新性的综合体验。超元力XR无轨黑暗乘骑凭借全球首创的技术架构&#xff0c;将XR、AGV、动感控制等前沿技术与传统黑暗乘骑相结合&#xff0c;实现了技术与体验的…...

给嵌入式开发者的RISC-V vs ARM实战选型指南:从开源生态到芯片采购的5个关键考量

RISC-V与ARM嵌入式开发实战选型指南&#xff1a;5个关键决策维度深度解析 当你在设计下一代智能门锁时&#xff0c;是选择RISC-V的灵活定制还是ARM的成熟稳定&#xff1f;这个看似简单的技术选型问题&#xff0c;实际上关乎产品未来三年的维护成本和市场竞争力。去年某家电厂商…...

别再只调RTC了!用STM32CubeIDE的RTC闹钟和唤醒功能,做个低功耗定时任务管理器

STM32CubeIDE实战&#xff1a;RTC闹钟与唤醒功能打造低功耗定时任务系统 在物联网和电池供电设备开发中&#xff0c;功耗优化往往成为决定产品成败的关键因素。想象一下&#xff0c;一个依靠纽扣电池运行的温湿度传感器&#xff0c;如果持续全速运转&#xff0c;可能几周就会耗…...

释放桌面美学:TranslucentTB如何让你的Windows任务栏焕然一新

释放桌面美学&#xff1a;TranslucentTB如何让你的Windows任务栏焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 厌倦了Windows任…...

MinGW-w64深度解析:从源码编译到专业Windows开发环境搭建

MinGW-w64深度解析&#xff1a;从源码编译到专业Windows开发环境搭建 【免费下载链接】mingw-w64 (Unofficial) Mirror of mingw-w64-code 项目地址: https://gitcode.com/gh_mirrors/mi/mingw-w64 MinGW-w64是Windows平台上最完整的GNU工具链实现&#xff0c;为开发者提…...

Zotero AI插件终极指南:5分钟打造你的智能文献助手

Zotero AI插件终极指南&#xff1a;5分钟打造你的智能文献助手 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 还在为海量文献管理而烦恼吗&#xff1f;Zotero AI插件将人工智能技术完美融入文献管理流程&#…...

LitCAD:5分钟快速上手的开源CAD绘图软件,让二维设计变得简单高效

LitCAD&#xff1a;5分钟快速上手的开源CAD绘图软件&#xff0c;让二维设计变得简单高效 【免费下载链接】LitCAD A very simple CAD developed by C#. 项目地址: https://gitcode.com/gh_mirrors/li/LitCAD 你是否曾因为专业CAD软件复杂难懂而放弃设计想法&#xff1f;…...

Windows系统终极优化指南:如何用WinUtil一键解决所有系统维护难题

Windows系统终极优化指南&#xff1a;如何用WinUtil一键解决所有系统维护难题 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 厌倦了Windows系…...

新库上线 | CnOpenData中国分地市交通用地面积统计数据

一、数据简介交通用地是指用于交通运输设施的土地&#xff0c;是衡量区域交通基础设施水平、联通能力和经济社会发展支撑条件的关键要素。CnOpenData中国分地市交通用地面积统计数据基于中国历次国土调查及国土年度变更调查汇总统计成果整理形成&#xff0c;数据集包括全国、分…...

从一道CTF题深入理解PHP文件包含漏洞:绕过过滤与伪协议利用详解

从一道CTF题深入理解PHP文件包含漏洞&#xff1a;绕过过滤与伪协议利用详解 当你面对一个看似简单的CTF题目时&#xff0c;可能不会想到它背后隐藏着如此丰富的安全知识。今天我们要解构的这个案例&#xff0c;正是PHP文件包含漏洞的经典教学范例。通过这道题&#xff0c;我们不…...

保姆级教程:在STM32CubeIDE环境下配置TCA9548A I2C多路复用器,附完整工程代码

STM32CubeIDE实战&#xff1a;TCA9548A多路I2C系统开发全流程解析 在嵌入式系统设计中&#xff0c;I2C总线因其简洁的两线制结构被广泛应用&#xff0c;但当需要连接多个相同地址的从设备时&#xff0c;总线扩展成为刚需。TCA9548A作为一款I2C多路复用器&#xff0c;能够将单一…...

SpringBoot + JAIN-SIP 实战:手把手教你搭建国标GB28181摄像头管理后台(附完整代码)

SpringBoot与JAIN-SIP构建国标GB28181平台实战指南 1. 国标视频监控平台的技术架构解析 GB28181标准作为国内视频监控领域的核心协议&#xff0c;定义了设备互联的完整规范体系。这套标准主要包含三个关键组成部分&#xff1a; SIP信令控制层&#xff1a;负责设备注册、会话…...

老项目复活指南:一招解决Android Studio或Flutter因Gradle版本过旧引发的SSL连接错误

老项目复活指南&#xff1a;一招解决Android Studio或Flutter因Gradle版本过旧引发的SSL连接错误 接手一个尘封多年的Android或Flutter项目时&#xff0c;开发者常会遇到一个令人头疼的问题&#xff1a;Gradle构建过程中突然抛出javax.net.ssl.SSLException: Connection reset错…...

实测对比:Jetson NX上CUDA加速的OpenCV vs 默认版本,性能提升到底有多大?

Jetson NX上CUDA加速的OpenCV性能实测&#xff1a;从理论到实践的全面对比 在边缘计算领域&#xff0c;Jetson Xavier NX凭借其强大的GPU性能成为计算机视觉项目的理想平台。但很多开发者可能没有意识到&#xff0c;默认安装的OpenCV其实并未启用CUDA加速功能&#xff0c;这意味…...

debian12安装GCC15

debian12安装GCC15 前几天想把boost里面的占位写替换成fmt::format&#xff0c;结果format非要依赖第三方库&#xff0c;还需要vcpkg&#xff0c;而且c的vcpkg包管理真的太烂了&#xff0c;和golang差距比天大&#xff0c;最后看到C20里面是有format包集成了&#xff0c;但是需…...

别再只盯着电感了!聊聊手机快充和LED驱动里,那颗‘会飞’的电容是怎么把电压‘泵’上去的

手机快充背后的隐形功臣&#xff1a;揭秘电荷泵如何用一颗电容实现高效升压 当你的手机在半小时内从0%充到80%时&#xff0c;背后隐藏着一项被大多数人忽视的黑科技——电荷泵。这种没有电感、仅靠电容"飞行"来传递能量的DC-DC转换器&#xff0c;正在悄然改变消费电子…...

从PyTorch自定义算子到CUDA 13原生kernel:5步完成端到端性能提效3.8倍,金融风控场景已验证

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从PyTorch自定义算子到CUDA 13原生kernel&#xff1a;5步完成端到端性能提效3.8倍&#xff0c;金融风控场景已验证 在高频信贷评分与实时反欺诈推理中&#xff0c;传统 PyTorch CPU/GPU 混合调度常因 k…...

不只是数据通道:用TMS320F28374S的CLB X-BAR和ePWM X-BAR设计灵活的保护与同步逻辑

TMS320F28374S的X-BAR系统&#xff1a;构建高可靠性实时控制架构的神经中枢 在工业电机驱动和数字电源系统中&#xff0c;毫秒级的延迟可能导致灾难性后果。当电流传感器检测到过载信号时&#xff0c;系统需要在微秒级别内切断PWM输出&#xff0c;同时触发保护逻辑链。传统的中…...

别再让数据库扛下所有:用Memcached给MySQL减负的5个实战场景与配置要点

从MySQL到Memcached&#xff1a;高并发场景下的缓存实战手册 当你的电商网站在大促期间突然变慢&#xff0c;数据库监控面板上的CPU使用率飙升至红线&#xff0c;这往往意味着关系型数据库正在承受它本不该承受的压力。Memcached作为一款久经考验的内存缓存系统&#xff0c;能在…...

避坑指南:在Proteus8中仿真51单片机红外通信(IRLINK)时,如何解决载波频率和协议解析的那些坑?

Proteus8仿真51单片机红外通信的五大核心陷阱与精准解决方案 当你在深夜调试Proteus8中的51单片机红外通信项目时&#xff0c;示波器上那些杂乱无章的波形是否曾让你陷入绝望&#xff1f;IRLINK模块看似简单&#xff0c;却暗藏诸多玄机。本文将从五个关键维度&#xff0c;解剖那…...

告别手动拖拽!用Lumerical脚本批量搭建FDTD仿真结构(附完整代码)

告别手动拖拽&#xff01;用Lumerical脚本批量搭建FDTD仿真结构&#xff08;附完整代码&#xff09; 在光子学仿真领域&#xff0c;时间就是创新的货币。当你在凌晨三点反复调整第37个纳米柱的旋转角度时&#xff0c;是否想过&#xff1a;那些本应用于突破性思考的精力&#xf…...

d2s-editor:暗黑破坏神2存档编辑器的终极免费解决方案

d2s-editor&#xff1a;暗黑破坏神2存档编辑器的终极免费解决方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Web的暗黑破坏神2存档编辑器&#xff0c;专为《暗黑破坏神2》玩家和模组开发者设计&#x…...

Linux服务器上配置vsftpd被动模式(PASV)的完整避坑指南:从端口范围到防火墙规则

Linux服务器vsftpd被动模式&#xff08;PASV&#xff09;全链路配置实战&#xff1a;从原理到防火墙策略 FTP服务在企业内部文件传输场景中始终占据重要地位&#xff0c;而vsftpd作为Linux平台最安全的FTP守护进程&#xff0c;其被动模式&#xff08;PASV&#xff09;的配置问题…...

如何区分网络延迟、抖动并针对性优化?

在住宅代理的实际应用中&#xff0c;网络连接的稳定性和响应速度直接影响业务效率。准确识别延迟与抖动的差异&#xff0c;是进行有效网络优化的前提。 网络延迟与抖动的核心区别 住宅代理场景中&#xff0c;网络延迟指数据包经代理节点往返目标服务器的平均耗时&#xff08;单…...

从一次线上BUG复盘说起:strict-origin-when-cross-origin如何影响你的第三方登录与支付回调

从一次线上BUG复盘说起&#xff1a;strict-origin-when-cross-origin如何影响你的第三方登录与支付回调 那天凌晨2点&#xff0c;我被一连串报警短信惊醒——支付回调接口突然大面积失败。用户完成微信支付后&#xff0c;系统无法正确跳转回订单详情页&#xff0c;而是不断重定…...

必要软件安装

vscode&#xff1a;https://vscode.js.cn/Download node.js&#xff1a;https://nodejs.org/zh-cn git&#xff1a;https://blog.csdn.net/mukes/article/details/115693833 cann&#xff1a;https://gitcode.com/cann/runtime...

AD9371裸机程序里那些容易配错的坑:SPI片选、SYSREF与时钟链详解

AD9371裸机开发实战&#xff1a;SPI片选、时钟链与SYSREF配置避坑指南 当你在深夜的实验室里盯着示波器上杂乱的信号波形&#xff0c;AD9371评估板依然 stubbornly 保持沉默——这种场景对射频工程师来说再熟悉不过。作为一款高性能集成收发器&#xff0c;AD9371的裸机程序配置…...