CSS 绘制扇面

news/2024/11/14 13:16:18/文章来源:https://www.cnblogs.com/xtreme/p/18354810

参考资料:https://juejin.cn/post/7266641059282927650

 

效果:

源码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>使用css3绘制任意角度扇形</title><style>.sector {position: relative;display: inline-block;width: 80px;height: 80px;background-color: transparent;border-radius: 50%;overflow: hidden;transform: rotate(45deg);}.sector::before {display: inline-block;content: '';width: 100%;height: 100%;background: linear-gradient(90deg,#4D84FF 25%,#eee 0,#eee 50%,#4D84FF 0,#4D84FF 75%,#eee 0);background-size: 30px;clip-path: polygon(50% 50%, 0 0, 100% 0);opacity: .7;}.sector::after {position: absolute;display: inline-block;content: '';width: 80px;height: 80px;top: calc(50% - 40px);left: calc(50% - 40px);border-radius: 50%;background-color: #fff;z-index: 1;}</style>
</head>
<body><div class="sector"></div>
</body><script>/*** @param {Number} radius: 半径* @param {Number} minRadius: 内半径* @param {Number} angles: 角度* @param {Number} direct: 方向**/function drawPie({radius, minRadius, angles, direct, selector}) {let points = ['50% 50%', '0 0'],residue = angles%45? angles%45:45,percent = 0direct = direct || 45;angles > 90 && points.push('100% 0');angles > 180 && points.push('100% 100%');angles > 270 && points.push('0 100%');//let percent = (100/2) * (Math.tan(2*Math.PI/360 * residue).toFixed(4)); // tan算出来的是相对半径的占比
        percent = (100/2) * (Math.tan(2*Math.PI/360 * residue).toFixed(4)); if(angles<=45) {points.push(percent + '%' + ' 0');}else if(angles<=90) {points.push(percent + 50 + '%' + ' 0');}else if(angles<=135) {points.push('100% ' + percent + '%');}else if(angles<=180) {points.push('100% ' + (percent + 50) + '%');}else if(angles<=225) {points.push(100 - percent + '%' + ' 100%');}else if(angles<=270) {points.push(50 - percent + '%' + ' 100%');}else if(angles<=315) {points.push('0 ' + (100 - percent) + '%');}else if(angles<=360) {points.push('0 ' + (50 - percent) + '%');}let path = 'polygon(' + points.join(', ') + ')';// 外扇面
        addCSSRule(selector + '::before', {'clip-path': path});// 内扇面
        addCSSRule(selector + '::after', {'clip-path': path,width: minRadius + 'px',height: minRadius + 'px',top: 'calc(50% - ' + minRadius/2 + 'px)',
            left: 'calc(50% - ' + minRadius/2 + 'px)'
        });// 容器大小和方向
        addCSSRule(selector, {width: radius + 'px',height: radius + 'px',transform: 'rotate(' + direct + 'deg)'});}// 绘制扇面
    drawPie({selector: '.sector',radius: 400,minRadius: 180,angles: 120, direct: 100});function addCSSRule(selector, rules, index) {// 创建一个style元素var style = document.createElement('style');// 设置type属性为text/css
        style.type = 'text/css';// 插入到head中
        document.head.appendChild(style);// 获取sheetvar sheet = style.sheet;// 如果index未提供,则添加到末尾
        index = index || null;// 如果是CSS规则字符串if (typeof rules === 'string') {// 直接添加
            sheet.insertRule(selector + ' {' + rules + '}', index);} else { // 如果是一个对象// 遍历对象中的所有属性for (var prop in rules) {if (rules.hasOwnProperty(prop)) {// 将属性和值转换为字符串var rule = prop + ': ' + rules[prop];// 添加到样式表中
                    sheet.insertRule(selector + ' {' + rule + '}', index);}}}}/*addCSSRule('.my-other-class', 'color: red; background-color: yellow;', 0); // 添加到顶部*/
</script></html>

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

咪咕视频m3u8地址解析及ddCalcu参数加密逆向

本文主要讲述咪咕视频m3u8地址的解析以及使用Wasm对视频的m3u8地址进行加密得到ddCalcu参数的方法。咪咕视频m3u8地址解析及ddCalcu参数加密逆向 概述 本文主要讲述咪咕视频m3u8地址的解析以及使用Wasm对视频的m3u8地址进行加密得到ddCalcu参数的方法。 使用视频ID获取未加密的…

Vs+Qt添加ui子页面

在Qt项目中,如果要实现一个弹出子界面并包含返回按钮的功能,最合适的选择是使用 Qt Dialog Form File 来创建子界面。 Qt Dialog Form File 与 Qt Widget Form File 的区别 Qt Dialog Form File (Button Bottom) 和 Qt Dialog Form File (Button Right): 这两种文件类型用于创…

ubuntu 22.04 安装 docker(服务器从毛胚到精装)

1、用户操作 阿里云默认是 root 用户,我们一般要自己创建一个用户,然后给该用户 sudo 权限 添加用户 sudo adduser newUserName赋予sudo权限 sudo usermod -aG sudo newUserName删除用户 sudo deluser --remove-home --remove-all-files newUserName切换用户 sudo su - newUs…

Mac os的防火墙导致开的热点手机连不上

在工位上用Mac给手机开热点用,结果今天手机一直连不上Mac开的热点,最后把Mac的防火墙关了就能让手机连上了,连上了再把防火墙打开也不影响连接。

k8s技术总结(一)

在学习完docker之后,也很有必要再学习k8s的一些理论和技术。 一、基础概念 kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。 特性1…

TIM-定时器

TIM简介定时器类型

C# 创建 Windows Service 项目

C# 创建 WindowsService 服务项目空白处,右键选择“添加安装程序”可以看到两个控件,点击右击第一个控件,打开属性设计器,将其中的Account设置为LocalSystem(本地服务),接下来,右击上面的第二个控件,打开属性界面,设置ServiceName,和将其中的StratType设置为Automatic…

【日记】我也想喝 AD 钙(978 字)

正文周五写了一整天学海计划,周六跟了一天的编曲教程,今天则是把第三章剩下的教程跟完。最后,回旋曲写是写出来了,就是把自己听笑了。写得实在太烂了。昨天晚上买了回来的机票。9 月 10 号一早。该说不说机票是真的贵啊……同时,我发现我过去的机票,执飞飞机是波音 737-8…

Kubernetes-二进制高可用部署v1.23.x

目录高可用架构k8s集群组件ectdkube-apiserverkube-schedulerkube-controller-managerkubeletkube-proxykubectl高可用分析负载均衡节点设计1.环境准备1.1 环境规划1.2 所有节点配置host解析1.3 安装必备工具1.4 所有节点关闭防火墙、selinux、dnsmasq、swap1.5 Master01节点免…

使用Pandas和NumPy实现数据获取

公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA以某城市地铁数据为例,通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。数据:http://u6v.cn/5W2i8H http://u6v.cn/6hUVjk初步发现数据有三个特点::1、地铁数据的前五行是…

Datawhale X 魔搭 AI夏令营(二)

一.AI生图的伦理与道德 1.虽然AI生图的能力强大,但是极易被使用在不正当的场景,未来的挑战不仅仅是技术的突破,更有攻防技术的跟进。 二.使用通义千问工具对内核代码进行解析,更快速的搭建代码 1.通义千问是具有信息查询、语言理解、文本创作等多能力的AI助手 2.使用方法三…