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

Web前端之JavaScript实现图片圆环、圆环元素根据角度指向圆心、translate、rotate

MENU

  • 前言
  • 效果
  • Html
  • Style
  • JavaScript


前言

代码段创建了一个由6个WiFi图标组成的圆形排列,每个图标均匀分布在圆周上。


效果

圆环


Html

代码

<div class="ring"><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div><div class="item"><img class="img" src="../image/icon/WiFi.png" /></div>
</div><script src="./index.js"></script>

解析

外层是一个ring容器,内部包含6个item元素
每个item包含一个WiFi图标图片
最后引入JavaScript文件


Style

代码

body {height: 100vh;margin: 0;display: flex;flex-direction: column;justify-content: center;align-items: center;background-color: #2e2e2e;
}.ring {width: 360px;height: 360px;position: relative;display: flex;justify-content: center;align-items: center;.item {width: 128px;height: 128px;position: absolute;.img {width: 100%;height: 100%;}}
}

解析

body样式
设置视口高度(100vh)
移除默认边距
使用flex布局使内容垂直水平居中
设置深灰色背景


ring容器
固定宽高360px
相对定位(为绝对定位的子元素提供参考)
flex布局使其内容居中


item元素
固定宽高128px
绝对定位(后续通过JavaScript定位)
内部图片填满整个item


JavaScript

代码

function init() {let elItem = document.querySelectorAll(".item"),radius = document.querySelector(".ring").clientWidth / 1,itemLen = elItem.length,pieceDeg = 360 / itemLen;for (let i = 0; i < itemLen; i++) {// 角度(度数)let deg = i * pieceDeg,// 角度(弧度)rad = (Math.PI / 180) * deg,x = Math.sin(rad) * radius,y = -Math.cos(rad) * radius;// 同时应用平移和旋转elItem[i].style.transform = `translate(${x}px, ${y}px) rotate(${deg}deg)`;}
}init();

解析

初始化变量
elItem: 获取所有item元素
radius: 计算半径(环的宽度除以1,其实就是环的半径)
itemLen: item数量(6个)
pieceDeg: 每个item之间的角度间隔(360°/6=60°)


循环处理每个item
1、计算当前item的角度(deg)
2、将角度转换为弧度(rad)
3、使用三角函数计算x和y坐标
3.1、x = sin(rad) * radius
3.2、y = -cos(rad) * radius (负号是因为屏幕坐标系y轴向下为正)
4、应用transform样式
4.1、translate(x, y): 将item移动到圆周上的位置
4.2、rotate(deg): 旋转item使其指向圆心


数学原理
代码使用了极坐标到直角坐标的转换公式
1、x = r × sin(θ)
2、y = r × cos(θ)
其中
1、r是半径(180px)
2、θ是角度(转换为弧度)
负的y坐标是因为在计算机屏幕坐标系中,y轴正方向是向下的,与数学中的笛卡尔坐标系相反。


效果说明
最终效果是6个WiFi图标均匀分布在一个圆周上,每个图标都指向圆心。这种布局方式常见于菜单或功能项的环形排列。
可以通过修改以下参数调整效果
1、增加/减少item数量
2、调整ring容器的尺寸
3、修改item的尺寸
4、改变旋转或平移的方式

http://www.lryc.cn/news/578760.html

相关文章:

  • vue-34(单元测试 Vue 组件的介绍)
  • 第六章 OpenCV篇—傅里叶变换与直方图
  • 通过http调用来访问neo4j时报错,curl -X POST 执行指令报错
  • 2025 推理技术风向标:DeepSeek-R1 揭示大模型从 “记忆” 到 “思考” 的进化路径
  • 8.Docker镜像讲解
  • 【读代码】百度开源大模型:ERNIE项目解析
  • 1.MySQL之如何定位慢查询
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 达梦数据库配置SYSDBA本地免密登录
  • 怎么查看Android设备中安装的某个apk包名和启动页activity
  • CSS 安装使用教程
  • 【Python基础】11 Python深度学习生态系统全景解析:从基础框架到专业应用的技术深度剖析(超长版,附多个代码及结果)
  • python 继承
  • HDMI 2.1 FRL协议的流控机制:切片传输(Slicing)和GAP插入
  • [Python] -基础篇8-Python中的注释与代码风格PEP8指南
  • Qt_Creator入门基础知识
  • 顶级SCI极光优化算法!PLO-Transformer-GRU多变量时间序列预测,Matlab实现
  • CMS、OA、CRM、ERP 是什么意思?区别在哪里
  • 为什么js是单线程?
  • C++ 快速回顾(六)
  • 黑马python(二十三)
  • 【ArcGIS】矢量数据的叠加分析
  • SQL SELECT 语句
  • Python OrderedDict 用法详解
  • TypeScript系列:第六篇 - 编写高质量的TS类型
  • 宁德时代携手问界,以“厂中厂”模式加速扩产
  • 零信任安全管理系统介绍
  • 电机控制——电机位置传感器零位标定
  • (论文总结)语言模型中的多模态思维链推理
  • Cross-modal Information Flow in Multimodal Large Language Models