突破编程_前端_SVG(ellipse 椭圆形)

news2024/9/23 21:32:25

1 ellipse 元素的基本属性和用法

ellipse 元素用于创建椭圆形状。它具有一系列的基本属性,允许自定义椭圆的外观和位置。以下是一些 ellipse 元素的基本属性和用法:

(1)基本属性

  1. cx 和 cy:这两个属性定义了椭圆中心的 x 和 y 坐标。默认情况下,椭圆的中心位于坐标系的原点(0,0)。
  2. rx 和 ry:这两个属性分别定义了椭圆在 x 轴和 y 轴上的半径。这决定了椭圆的大小和形状。
  3. fill:这个属性用于设置椭圆内部的填充颜色。你可以使用颜色名称、十六进制颜色代码、RGB 值等来指定颜色。如果不设置填充颜色,椭圆将默认不填充(透明)。
  4. stroke:这个属性用于设置椭圆的描边颜色。同样,你可以使用各种颜色格式来指定描边颜色。
  5. stroke-width:这个属性用于设置椭圆的描边宽度。描边宽度的值是非负整数,默认为 1。如果设置为 0,椭圆将没有描边。
  6. stroke-linecap:这个属性定义了描边端点的形状,可以取值 “butt”(默认值)、“round” 或 “square”。
  7. stroke-linejoin:这个属性定义了描边在两条线交叉时的连接方式,可以取值 “miter”(默认值)、“round” 或 “bevel”。

(2)用法示例

以下是一个简单的SVG示例,展示了如何使用 ellipse 元素及其基本属性来创建一个带有描边和填充颜色的椭圆:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <ellipse cx="100" cy="100" rx="50" ry="30" fill="blue" stroke="red" stroke-width="2" />
</svg>

在这里插入图片描述

在这个示例中,我们创建了一个宽度为200、高度为200的SVG画布。在画布上,我们使用 ellipse 元素创建了一个椭圆。椭圆的中心位于(100,100),x轴半径为50,y轴半径为30。椭圆内部填充为蓝色,描边为红色,描边宽度为2。

2 高级 ellipse 元素的样式设置

2.1 使用 CSS 为 ellipse 元素添加样式

当使用CSS为SVG中的 ellipse 元素添加样式时,你可以通过内联样式、内部样式表或外部样式表来实现。SVG是XML的一种形式,因此它可以接受内联样式,也可以链接到外部的CSS样式表。下面我们将详细讲解如何使用这些方法为 ellipse 元素添加样式。

(1)内联样式

内联样式是直接在 SVG 元素上通过 style 属性添加 CSS 样式。这种方法的优点是简单直观,但缺点是如果多个元素需要相同的样式,会造成代码冗余。

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <ellipse cx="100" cy="100" rx="50" ry="30"
           style="fill:blue; stroke:red; stroke-width:2;" />
</svg>

在这个例子中, ellipse 元素的 style 属性中定义了填充颜色( fill )、描边颜色( stroke )和描边宽度( stroke-width )。

(2)内部样式表

内部样式表是将 CSS 样式定义在SVG文档的 <style> 元素内。这种方式可以让你复用样式规则,减少代码冗余。

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <style>
    .myEllipse {
      fill: blue;
      stroke: red;
      stroke-width: 2;
    }
  </style>
  <ellipse cx="100" cy="100" rx="50" ry="30" class="myEllipse" />
</svg>

在这个例子中,我们定义了一个 CSS 类 .myEllipse ,并在 ellipse 元素上通过 class 属性应用了这个类。这样,我们就可以在多个 ellipse 元素上复用这个样式了。

(3)外部样式表

如果有一个大型的 SVG 文档或者多个 SVG 文档需要共享相同的样式,则可以考虑使用外部样式表。外部样式表是一个单独的 CSS 文件,你可以通过SVG文档的 <link> 元素或HTML文档的 <style> 元素引用它。

假设有一个名为 styles.css 的外部样式表,内容如下:

.myEllipse {
  fill: blue;
  stroke: red;
  stroke-width: 2;
}

在 SVG 文档中,可以这样引用它:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <style type="text/css">
      @import url('styles.css');
    </style>
  </defs>
  <ellipse cx="100" cy="100" rx="50" ry="30" class="myEllipse" />
</svg>

注意,这里使用了 defs 元素来包含 style 元素,这是 SVG 中用于定义可重用的元素和属性的地方。同时,我们添加了 xmlns:xlink 命名空间声明,因为 @import 规则是 XLink 规范的一部分。

(4)注意事项

  • SVG 的 CSS 属性与 HTML 中的 CSS 属性大部分相同,但也有一些特定的 SVG 属性,如 fill 、 stroke 等,这些属性在 SVG 中有特殊的意义。
  • 样式规则的优先级同样适用于 SVG。如果有多个规则应用于同一个元素,则最后定义的规则或者具有更高优先级的规则将生效。

通过这些方法,可以灵活地为 SVG 中的 ellipse 元素添加样式,并根据需要调整它们的外观。

2.2 使用渐变填充

在SVG中,你可以使用渐变来填充ellipse元素,从而创建出丰富多样的视觉效果。SVG提供了两种类型的渐变:线性渐变(linearGradient)和径向渐变(radialGradient)。这些渐变可以通过定义一系列的颜色停止点(stop)来创建平滑的颜色过渡。

下面,我将详细讲解如何使用这两种渐变来填充ellipse元素。

(1)线性渐变填充

线性渐变是沿着一条直线平滑地过渡的颜色。可以指定渐变的起始点和结束点,以及中间的颜色停止点。

下面是一个使用线性渐变填充 ellipse 元素的示例:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <linearGradient id="myGradient" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" style="stop-color:red; stop-opacity:1" />
      <stop offset="100%" style="stop-color:blue; stop-opacity:1" />
    </linearGradient>
  </defs>
  <ellipse cx="100" cy="100" rx="50" ry="30" fill="url(#myGradient)" />
</svg>

在这里插入图片描述

在这个例子中:

  • <defs> 元素用于定义可重用的元素,如渐变。
  • <linearGradient> 元素定义了线性渐变。id 属性为渐变提供了一个唯一的标识符,以便稍后在 ellipse 元素的 fill 属性中引用它。
  • x1, y1, x2, y2 属性定义了渐变的起始点和结束点。在这个例子中,渐变从左到右(从0%到100%)。
  • <stop> 元素定义了渐变中的颜色停止点。offset 属性指定了停止点在渐变中的位置(以百分比表示)。stop-color 和 stop-opacity 属性定义了停止点的颜色和透明度。
  • ellipse 元素的 fill 属性通过 url(#myGradient) 引用了之前定义的渐变。

(2)径向渐变填充

径向渐变从中心点向外平滑地过渡颜色,通常创建出类似于光环或圆晕的效果。

下面是一个使用径向渐变填充 ellipse 元素的示例:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <radialGradient id="myRadialGradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
      <stop offset="0%" style="stop-color:yellow; stop-opacity:1" />
      <stop offset="100%" style="stop-color:green; stop-opacity:1" />
    </radialGradient>
  </defs>
  <ellipse cx="100" cy="100" rx="50" ry="30" fill="url(#myRadialGradient)" />
</svg>

在这里插入图片描述

在这个例子中:

  • <radialGradient> 元素定义了径向渐变。
  • cx 和 cy 属性定义了渐变的中心点。
  • r 属性定义了渐变的半径,即颜色从中心向外扩散的范围。
  • fx 和 fy 属性是可选的,它们定义了渐变的焦点,即颜色最亮或最浓的位置。在这个例子中,焦点与中心点相同。
  • 其余部分与线性渐变示例类似,包括定义颜色停止点和在 ellipse 元素中使用渐变填充。

2.3 使用阴影效果

在 SVG 中,为 ellipse 元素添加阴影效果可以通过使用 filter 元素结合内置的 feDropShadow 滤镜来实现。阴影效果能够增强 ellipse 元素的立体感和层次感,使图形更加生动。

(1)定义阴影滤镜

首先,需要在SVG文档的 部分定义一个阴影滤镜。这个滤镜使用 feDropShadow 元素来创建阴影效果。

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="dropShadow">
      <feDropShadow dx="2" dy="2" stdDeviation="2" flood-color="black" flood-opacity="0.5" />
    </filter>
  </defs>
  <!-- 其余的SVG内容 -->
</svg>

在这个例子中:

  • filter 元素定义了一个滤镜,并通过 id 属性给它一个唯一的标识符(这里是 dropShadow )。
  • feDropShadow 元素用于创建阴影效果。
  • dx 和 dy 属性分别控制阴影在X轴和Y轴上的偏移量。正值将阴影向右和向下移动。
  • stdDeviation 属性控制阴影的模糊程度。值越大,阴影的边缘越模糊。
  • flood-color 属性设置阴影的颜色。
  • flood-opacity 属性设置阴影的不透明度。

(2)应用阴影滤镜到 ellipse 元素

接下来,需要将定义的阴影滤镜应用到 ellipse 元素上。这可以通过在 ellipse 元素的 filter 属性中引用滤镜的 id 来实现。

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="dropShadow">
      <feDropShadow dx="2" dy="2" stdDeviation="2" flood-color="black" flood-opacity="0.5" />
    </filter>
  </defs>
  <ellipse cx="100" cy="100" rx="50" ry="30" style="fill:blue;" filter="url(#dropShadow)" />
</svg>

在这里插入图片描述

在这个例子中:

  • ellipse 元素的 filter 属性引用了之前定义的阴影滤镜,通过 url(#dropShadow) 来指定。
  • style 属性设置了 ellipse 元素的填充颜色。

(3)调整阴影效果

可以通过调整 feDropShadow 元素的属性来精细控制阴影效果。例如,增加 dx 和 dy 的值将使阴影更远地偏离椭圆;增加 stdDeviation 的值将使阴影更加模糊;改变 flood-color 和 flood-opacity 的值将改变阴影的颜色和不透明度。

(4)注意事项

  • 阴影滤镜可能会对性能产生一定的影响,特别是在复杂的 SVG 图形或动画中。因此,在性能敏感的应用中,应谨慎使用阴影效果。
  • 滤镜效果是 SVG 的强大特性之一,但并非所有浏览器都完全支持所有的滤镜效果。在使用时,建议检查目标浏览器的兼容性。

3 使用 JavaScript 操作 ellipse 元素

使用 JavaScript 操作 ellipse 元素可以让动态地改变其属性、样式、位置或行为。

(1)创建和添加 ellipse 元素

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SVG Circle with JavaScript</title>
</head>
<body>
<svg id="mySvg" width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <!-- SVG content will be added here -->
</svg>

<script>
  // 创建ellipse元素
  var ellipse = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");

  // 设置ellipse的属性
  ellipse.setAttribute("cx", 100);
  ellipse.setAttribute("cy", 100);
  ellipse.setAttribute("rx", 50);
  ellipse.setAttribute("ry", 30);
  ellipse.setAttribute("fill", "blue");

  // 获取SVG元素
  var svg = document.getElementById("mySvg");

  // 将ellipse添加到SVG中
  svg.appendChild(ellipse);
</script>
</body>
</html>

(2)改变 ellipse 的属性

<script>
  // 假设ellipse已经存在于SVG中
  var ellipse = document.querySelector("#mySvg ellipse");

  // 改变圆心位置
  ellipse.setAttribute("cx", 150);
  ellipse.setAttribute("cy", 150);

  // 改变半径
  ellipse.setAttribute("rx", 60);
  ellipse.setAttribute("ry", 40);

  // 改变填充颜色
  ellipse.setAttribute("fill", "green");
</script>

(3)使用 CSS 样式操作 ellipse

<style>
  .myEllipse {
    fill: red;
    stroke: black;
    stroke-width: 2;
  }
</style>

<script>
  var ellipse = document.querySelector("#mySvg ellipse");

  // 添加CSS类来改变样式
  ellipse.classList.add("myEllipse");

  // 稍后,你可以移除或切换类来更改样式
  ellipse.classList.remove("myEllipse");
  ellipse.classList.add("anotherClass");
</script>

(4)使用 JavaScript 监听和响应事件

<script>
  var ellipse = document.querySelector("#mySvg ellipse");

  // 添加点击事件监听器
  ellipse.addEventListener("click", function() {
    alert("Circle clicked!");

    // 例如,改变 cx
    this.setAttribute("cx",  parseInt(this.getAttribute("cx")) + 10);
  });
</script>

(5)使用 JavaScript 进行动画

<script>  
	// 获取椭圆元素  
	const ellipse = document.getElementById('myEllipse');  
	  
	// 初始位置  
	let xPos = 0;  
	  
	// 动画函数  
	function animateEllipse() {  
	  // 更新椭圆的位置  
	  xPos += 2; // 每次增加2个单位  
	  if (xPos > 400 - 50) { // 如果椭圆到达SVG的右边边界,则反向移动  
		xPos = 0;  
	  }  
		
	  // 设置新的cx属性值  
	  ellipse.setAttribute('cx', xPos);  
	  
	  // 请求下一帧动画  
	  requestAnimationFrame(animateEllipse);  
	}  
	  
	// 启动动画  
	animateEllipse();  
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【详细介绍下火绒安全】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

2011年认证杯SPSSPRO杯数学建模B题(第二阶段)生物多样性的评估全过程文档及程序

2011年认证杯SPSSPRO杯数学建模 B题 生物多样性的评估 原题再现&#xff1a; 2010 年是联合国大会确定的国际生物多样性年。保护地球上的生物多样性已经越来越被人类社会所关注&#xff0c;相关的大规模科研和考察计划也层出不穷。为了更好地建立国际交流与专家间的合作&…

pyinstaller工具打包python项目详细教程

使用 Pyinstaller工具 编译打包 Python 项目生成 exe 可执行文件 1.pyinstaller介绍&#xff1a; 介绍&#xff1a;PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等多种系统上运行。详细介绍可参考pyins…

CCF区块链论文录用资讯--ICDE 2024

ICDE是CCF A类会议 (数据库&#xff0f;数据挖掘&#xff0f;内容检索) 其2024录用了8篇区块链论文 Database technology for Blockchains I Efficient Partial Order Based Transaction Processing for Permissioned Blockchains &#xff08;针对许可区块链的高效的基于偏序…

动态规划|63.不同路径II

力扣题目链接 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m obstacleGrid.size();int n obstacleGrid[0].size();if (obstacleGrid[m - 1][n -1] 1 || obstacleGrid[0][0] 1) return 0;vector<ve…

永久关闭 Windows 11 系统更新

永久关闭 Windows 11 系统更新 请注意&#xff0c;关闭系统更新可能会使您的系统面临安全风险。确保您了解可能的后果&#xff0c;并在必要时考虑重新启用更新。 使用组策略编辑器&#xff08;仅限 Windows 11 Pro 和 Enterprise 版&#xff09; 步骤 1&#xff1a;打开本地…

Android Surface的跨进程绘制,如何绘制xml布局给Surface,全网独一份

工作中遇到了这样一个需求 需求&#xff1a;需要将一个自定义View或者自定义布局通过跨进程方式传递给第二个应用来展示&#xff0c;第一个应用负责布局的渲染&#xff0c;第二个应用不需要关心第一个应用的业务和实现&#xff0c;仅提供SurfaceView占位及展示 方案&#xff…

嵌入式学习day16-22(2024.04.06-13)

文章目录 C语言网络编程socket主机与网络字节序转换inet_addr、inet_aton&#xff08;ip转换&#xff09;inet_ntoa 网络字节序转换为IP字符串端口转换为网络字节序网络字节序转换为端口atoi &#xff08;字符串转换为整数&#xff09; UDP通信流程UDP多进程并发服务器服务端客…

【已测 非网上加密版】全新UI彩虹站长在线工具箱系统源码下载 全开源版本

支持高达72种站长工具、开发工具、娱乐工具等功能。本地调用API、自带免费API接口&#xff0c;是一个多功能性工具程序支持后台管理、上传插件、添加增减删功能。 环境要求 * PHP > 7.3 * MySQL > 5.6 * fileinfo扩展 * 使用Redis缓存需安装Redis扩展 部署 * 下载源代码 …

【嵌入式】交叉编译指南:将开源软件带到嵌入式世界

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Java反序列化Commons-Collections-CC1链

环境搭建 JDK8u71以下&#xff0c;这个漏洞已经被修复了&#xff0c;这个JDK的以上版本都修复了漏洞 JDK8u65 下载地址 https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html这个时候来到 pom.xml 配置Maven依赖下载CommonsCollections3.2.…

20V/1.5A替代LT1963低压差线性稳压器

概述(替代LT1963) PCD3941 是一款低压差稳压器&#xff0c;专为快速瞬态响应而优化。该装置能够提供 1.5A 的输出电流&#xff0c;典型压降为 160mV。工作静态电流为 1mA&#xff0c;关机时降至 1μA以下&#xff0c;同时压差模式下静态电流控制良好。除了快速瞬态响应外&…

【Linux】封装一下简单库 理解文件系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、封装一下简单库 二、理解一下stdin(0)、stdout(1)、stderr(3) 2.1、为什么要有0、1、2呢&#xff1f; 2.2、特点 2.3、如果我想让2也和1重定向到一个文件…

护眼台灯哪个牌子好?护眼灯十大品牌推荐,绝对真香!

对于有孩子的家庭&#xff0c;特别是阅读爱好者&#xff0c;晚上阅读时的光线问题至关重要。昏暗环境长时间阅读&#xff0c;会严重伤害孩子的眼睛。因此&#xff0c;选择一款合适的护眼台灯显得尤为重要。但市场上品牌众多&#xff0c;护眼台灯哪个牌子好?这往往让人难以抉择…

【Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现】

文章目录 前言 一、漏洞名称 二、漏洞描述 三、受影响端口 四、受影响版本 五、漏洞验证 六、修复建议 前言 近日在做漏扫时发现提示服务器存在CVE-2020-1938漏洞&#xff0c;故文章记录一下相关内容。 一、漏洞名称 Tomcat 文件读取/文件包含漏洞(CVE-2020-1938) 二、漏洞描…

a == 1 a== 2 a== 3 返回 true ?

1. 前言 下面这道题是 阿里、百度、腾讯 三个大厂都出过的面试题&#xff0c;一个前端同事跳槽面试也被问了这道题 // &#xff1f; 位置应该怎么写&#xff0c;才能输出 trueconst a ?console.log(a 1 && a 2 && a 3) 看了大厂的面试题会对面试官的精神…

这款开发工具大大降低IoT开发门槛!完全开源,上手超简单

对开发者来说&#xff0c;IoT 开发的难点是什么&#xff1f;首先&#xff0c;IoT 涉及到多个领域和多种开发技术&#xff0c;每一层的技术接口、协议都需要跨平台、跨领域、跨系统的合作协同&#xff1b;在互联互通方面&#xff0c;智能设备间的兼容性亟待进一步地打通融合&…

ANSYS 2023版 下载地址及安装教程

ANSYS是一款著名的工程仿真软件&#xff0c;广泛应用于航空航天、汽车、能源和制造等领域。它为工程师和设计师提供了强大的建模、分析和优化工具&#xff0c;可以帮助他们预测和优化产品的性能。 ANSYS提供了广泛的模拟功能&#xff0c;包括结构力学、流体力学、电磁场和热传…

Unity | Shader基础知识(第十二集:颜色混合)

目录 前言 一、日常生活中的常见现象 二、unity自带的一个结构体&#xff08;表面着色器SurfaceOutputStandard&#xff09; 三、自己写一个颜色混合的Shader 1.只加基础颜色Albedo 2.加入法线 3.加入光滑度 4.加入金属度 5.加入自发光 四、作者的话 前言 shader里每一…

2024第十五届蓝桥杯 JAVA B组

目录 前言&#xff1a;试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言&#xff1a; 没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只…