SVG的text使用

SVG的text使用:

参考:http://www.docin.com/p-7393979.html

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title>
</head>
<body>
<div>
<svg width="240px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <path d="M20,10,20,120M10,30,100,30,M10,70,100,70M10,110,100,110" style="stroke:gray;" />
    <text x=20 y=30>Simplest Text</text>
    <text x=20 y=70 style="stroke:black">Outlined/filled</text>
    <text x=20 y=110 style="stroke:black;stroke-width:0.5;fill:none">Outlined only</text>
</svg>
<svg width="240px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <g style="font-size:18pt" >
        <text x=20 y=20 style="font-weight:bold">bold</text>
        <text x=120 y=20 style="font-style:italic">italic</text>
        <text x=20 y=60 style="text-decoration:underline">under</text>
        <text x=80 y=60 style="text-decoration:overline">over</text>
        <text x=140 y=60 style="text-decoration:line-through">through</text>
        <!-- word-spacing:10pt导致word之间的距离变大了  -->
        <text x=20 y=100 style="word-spacing:10pt">abc def</text>
        <!-- word-spacing:-3pt导致word之间的距离变小了  -->
        <text x=140 y=100 style="word-spacing:-3pt">abc def</text>
        <!-- letter-spacing:5pt导致letter之间的距离变大了  -->
        <text x=20 y=140 style="letter-spacing:5pt">abc def</text>
        <!-- letter-spacing:-6pt导致letter之间的距离变小了  -->
        <text x=140 y=140 style="letter-spacing:-6pt">abc def</text>
    </g>
</svg>
<svg width="240px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <g style="font-size:14pt">
        <path d="M100,10,100,100" style="stroke:gray;fill:none" />
        <!-- 文本水平对齐的方式三种:start,middle,end -->
        <text x=100 y=20 style="text-anchor:start">start</text>
        <text x=100 y=40 style="text-anchor:middle">middle</text>
        <text x=100 y=60 style="text-anchor:end">end</text>
    </g>
</svg>
<svg width="440px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <!-- tspan 可以进行text标签内的字体的装饰 -->
    <text x=10 y=30 style="font-size:12pt" >Swith among 
        <tspan style="font-style:italic">italic</tspan>,normal and
        <tspan style="font-style:bold">bold</tspan> text.
    </text>
    <!-- 在有tspan的情况下,使用line-through会穿过每一个tspan的; -->
    <text x=10 y=50 style="text-decoration:line-through" >F<tspan dy=4>a</tspan><tspan dy=4>l</tspan><tspan dy=4>l</tspan></text>
    <!-- 注意后面的文字,会受到前面tspan的位置信息的影响 -->
    <text x=10 y=90>It's <tspan dx="0 4 -3 5 -4 6" dy="0 -3 7 3 -2 -8" rotate="5 10 -5 -20 0 15">shaken</tspan>,not stirred.</text>
    <text x=10 y=130>C<tspan style="baseline-shift:sub">12</tspan> and 10<tspan style="baseline-shift:super">23</tspan></text>
</svg>
</div>
<div>
<svg width="240px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <!-- 通过旋转将字体变为纵向 -->
    <text x=10 y=20 transform="rotate(90,10,20)">Rotated 90</text>
    <!-- 使用writing-mode:tb将字体变为纵向 -->
    <text x=40 y=20 style="writing-mode:tb;">mode:tb</text>
    <!-- 可以使用glyph-orientation-vertical:0将字母变为垂直方向;其值只能是90的倍数 -->
    <text x=70 y=20 style="writing-mode:tb;glyph-orientation-vertical:0">mode:tb</text>
    <!-- 可以使用letter-spacing:-3pt缩小字母之间的距离 -->
    <text x=100 y=20 style="writing-mode:tb;glyph-orientation-vertical:0;letter-spacing:-3pt">mode:tb</text>
</svg>
<svg width="240px" height="240px" xmlns="http://www.w3.org/2000/svg">
    <!-- 文本是水平的时候可以使用glyph-orientation-horizontal:90将字母方向旋转,其值只能是90的倍数 -->
    <text x=10 y=20 style="glyph-orientation-horizontal:90">this is text</text>
</svg>
</div>
</body>
</html>

 

### 回答1: SVG文本动画可以通过CSS动画或JavaScript实现。以下是两种实现方式: 1. CSS动画:使用CSS的@keyframes规则定义动画,并将其应用于SVG文本元素。例如,可以使用以下代码创建一个向上移动的文本动画: ``` <svg> <text x="50%" y="50%" text-anchor="middle">Hello World!</text> </svg> <style> text { animation: move-up 2s ease-in-out infinite; } @keyframes move-up { 0% { transform: translateY(0); } 50% { transform: translateY(-20px); } 100% { transform: translateY(0); } } </style> ``` 2. JavaScript:使用SVG的API(如getBBox()和setAttribute())来操作SVG文本元素的属性,从而创建动画效果。例如,可以使用以下代码创建一个文本放大缩小的动画: ``` <svg> <text x="50%" y="50%" text-anchor="middle" font-size="24">Hello World!</text> </svg> <script> var textElem = document.querySelector('text'); var originalFontSize = textElem.getAttribute('font-size'); var scaleFactor = 1.2; function animate() { textElem.setAttribute('font-size', originalFontSize); textElem.animate([ { transform: 'scale(1)' }, { transform: 'scale(' + scaleFactor + ')' }, { transform: 'scale(1)' } ], { duration: 1000, easing: 'ease-in-out', iterations: Infinity }); } animate(); </script> ``` 这些例子仅仅是SVG文本动画的简单介绍,你可以根据自己的需求和创意,使用更多的SVG API和CSS属性来创建更加复杂和炫酷的动画效果。 ### 回答2: SVG(可缩放矢量图形)是一种用于在网页上创建图形的XML标记语言。在SVG中,我们可以使用文本元素创建文字,并通过动画效果使其呈现出各种变化。 要创建SVG文本动画,我们通常可以使用CSS或JavaScript来实现。 使用CSS,我们可以通过@keyframes规则来定义动画的关键帧。我们可以为文本元素添加CSS类,并为该类添加动画属性,例如动画名称、持续时间和重复次数。然后,我们可以定义具体的关键帧,例如起始状态、中间状态和结束状态,以实现文本的动态效果。通过在关键帧之间设置适当的过渡,我们可以创建平滑的动画效果。最后,通过将CSS动画应用于文本元素,我们可以触发动画的播放。 另一种方法是使用JavaScript来实现SVG文本动画。我们可以使用SVG DOM API来获取文本元素,然后使用JavaScript来对元素属性进行动态修改。通过改变文本的位置、旋转角度、透明度等属性,我们可以实现各种动画效果。我们还可以使用JavaScript库如GSAP来简化动画的操作和控制。 无论我们选择CSS还是JavaScript,都可以使用SVG的特性和功能来创建各种文本动画效果。我们可以实现闪烁的字体、文字路径动画、字体逐渐出现和消失等效果。通过探索不同的动画属性和效果,我们可以创造出独特且吸引人的SVG文本动画效果。 ### 回答3: SVG文本动画是一种使用可缩放矢量图形(SVG)来创建动画效果的技术。SVG文本动画可以通过在SVG文本元素中应用不同的属性和效果来实现。 首先,我们可以使用CSS来为SVG文本元素应用一些基本的动画效果。可以使用@keyframes规则来定义动画的关键帧,并使用animation属性将其应用于SVG文本元素。通过指定关键帧的属性值和持续时间,可以创建各种效果,比如逐字显示、渐变、旋转等。 其次,我们可以使用SVG的<animate>元素来创建更复杂的文本动画效果。通过在SVG文本元素中插入<animate>元素并设置关键属性,我们可以实现文本的平移、缩放、旋转等动态效果。可以通过设置不同的动画属性值、持续时间和重复次数来控制动画的效果。 此外,我们还可以使用JavaScript来控制SVG文本的动画。通过使用SVG的DOM API,我们可以动态地改变SVG文本元素的属性值来实现动画效果。可以通过在JavaScript中编写动画函数,并将其与SVG文本元素关联起来,实现更复杂的动画交互效果。 总之,SVG文本动画是一种强大的技术,可以为网页和应用程序添加各种吸引人的动画效果。通过合理地运用CSS、SVGJavaScript,我们可以创造出丰富多样的SVG文本动画,提升用户体验并增加视觉吸引力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值