前面的话

  本文将详细介绍SVG文本相关内容

位置属性

  在一个SVG文档中,使用<text>元素来设置文本,<text>元素有x、y、dx、dy这四个位置属性

【x和y】

  属性x和属性y性决定了文本在视口中显示的位置

<text x="30" y="30">Hello World!</text>

  可以只设置y属性,此时x属性默认为0

  [注意]如果不设置y属性,则文本将不会显示

<text  y="30">Hello World!</text>

【dx和dy】

  属性dx和dy用于设置文本相对于当前位置的偏移量

<svg version="1.1" height="70" xmlns="http://www.w3.org/2000/svg">
<text x="30" y="30">Hello World!</text>
<text x="30" y="50" dx="10">Hello World!</text>
</svg>

  如果dx或dy的值是多个值,则从第二个值开始,表示文本内字符的间距

<svg version="1.1" height="70" xmlns="http://www.w3.org/2000/svg">
<text x="30" y="30">Hello World!</text>
<text x="30" y="50" dx="10 10 20 30 40">Hello World!</text>
</svg>

对齐属性

【水平对齐】

  属性text-anchor用来设置水平对齐,取值包括:start、middle、end或inherit

<svg version="1.1" width="300" height="100" xmlns="http://www.w3.org/2000/svg">
<polyline points="160 80, 160 20, 300,20" fill="transparent" stroke="black"/>
<text x="160" y="20" text-anchor="start">小火柴的蓝色理想</text>
<text x="160" y="50" text-anchor="middle">小火柴的蓝色理想</text>
<text x="160" y="80" text-anchor="end">小火柴的蓝色理想</text>
</svg>

【垂直对齐】

  属性dominant-baseline可以设置垂直对齐,包括以下属性

样式属性

  和形状元素类似,属性fill可以给文本填充颜色,属性stroke可以给文本描边,也可以引用渐变或图案

  对于字体相关属性,下列每个属性可以被设置为一个SVG属性或者成为一个CSS声明:font-familyfont-stylefont-weightfont-variantfont-stretchfont-sizefont-size-adjustkerningletter-spacingword-spacingtext-decoration

<svg version="1.1" height="30" xmlns="http://www.w3.org/2000/svg">
<text y="20" font-size="20px" font-weight="bold" stroke="red" fill="transparent">Hello World!</text>
</svg>

tspan

  tspan元素用来标记大块文本的子部分,它必须是一个text元素或别的tspan元素的子元素。一个典型的用法是把句子中的一个词变成粗体

  <text x="10" y="50">
<tspan font-weight="bold">小火柴</tspan>的蓝色理想
</text>

【自定义属性】

  tspan元素有以下的自定义属性

  x 为容器设置一个新绝对x坐标。它覆盖了默认的当前的文本位置。这个属性可以包含一个数列,它们将一个一个地应用到tspan元素内的每一个字符上

  dx 从当前位置,用一个水平偏移开始绘制文本。这里,可以提供一个值数列,可以应用到连续的字体,因此每次累积一个偏移

  类似地,还有y和dy

  rotate 把所有的字符旋转一个角度。如果是一个数列,则使每个字符旋转分别旋转到那个值,剩下的字符根据最后一个值旋转

  textLength 这是一个很模糊的属性,给出字符串的计算长度。它意味着如果它自己的度量文字和长度不满足这个提供的值,则允许渲染引擎精细调整字型的位置

<svg version="1.1" height="30" xmlns="http://www.w3.org/2000/svg">
<text x="10" y="20">
小火柴的<tspan x="100" dx="0 10 10 10" rotate="30" font-weight="bold">蓝色理想</tspan>
</text>
</svg>

textPath

  该元素利用路径文本textPath的xlink:href属性取得一个任意路径,把字符对齐到路径,于是字体会环绕路径、顺着路径走

  [注意]如果给出的路径长度不够长,则超出部分不会被渲染出来

  渲染原理如下图所示

  下面是一个例子

<svg version="1.1" width="300" height="100" xmlns="http://www.w3.org/2000/svg">
<path id="my_path" d="M 20,20 C 50 50, 160 50, 160 20" fill="none"/>
<text>
<textPath xlink:href="#my_path">小火柴的蓝色理想</textPath>
</text>
</svg>

【属性】

  使用textPath后,text元素的x和y属性的含义有所改变

x 路径位置
y 无效

  textPath只有一个startOffset属性,用来确定排列起始位置

波浪文字

  下面使用SVG,来实现波浪文字的效果。由于<text>标签的dx、dy属性可以控制文本间的间距。因此,可以通过定时器动态的修改他们的值,将其呈现出动态波浪文字的效果

<svg version="1.1" width="300" height="100" xmlns="http://www.w3.org/2000/svg">
<text id="sinText" x="10" y="50">小火柴的蓝色理想小火柴的蓝色理想</text>
</svg>
<br>
<button id="btn1">开始运动</button>
<button id="btn2">暂停运动</button>
<script>
//n为文本的数量
var n = sinText.innerHTML.length;
//x和y分别储存dx和dy的值
var x = [],y = [];
//设置x的值
for(var i = 0; i < n; i++){
x.push(2*Math.PI/n);
}
function arrange(t){
//清空数组
y = [];
var ly = 0,cy;
for(i = 0; i < n; i++){
//计算当前的曲线的cy值
cy = -20*Math.sin(0.5*i+t);
//将y的差值保存到数组中
y.push(cy-ly);
//保存上一个y的值
ly = cy;
}
}
function render(){
//将x、y数组中的值渲染到dx、dy中
sinText.setAttribute('dx',x.join(' '));
sinText.setAttribute('dy',y.join(' '));
}
(function init(){
arrange(0);
render();
})();
var t = 0;
var oTimer = null;
function frame(){
t +=0.1;
arrange(t);
render();
oTimer = requestAnimationFrame(frame);
}
btn1.onclick = function(){
cancelAnimationFrame(oTimer);
oTimer = requestAnimationFrame(frame);
}
btn2.onclick = function(){
cancelAnimationFrame(oTimer);
}
</script>

SVG文本的更多相关文章

  1. SVG 文本

    该部分为四个主要部分: 1.  <text>和<tspan>标签详解 2.  文本水平垂直居中问题 3.  <textpath>让文本在指定路径上排列  4 ...

  2. SVG之文本

    一.文本标签<text> SVG支持直接对文本进行操作,如果我们需要在SVG中使用文本,那么我们需要使用到<text>标签.直接看一个简单的demo. <!DOCTYPE ...

  3. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

  4. svg是什么

    SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定的开放标准.SVG 使用 XML 格式来定义图形,除了 IE8 之 ...

  5. HTML5程序设计--SVG

    SVG(Scalable Vector Graphics):可缩放矢量图形,一种二维图形表示语言. 借助SVG,我们可以实现很多同Canvas API类型的绘制操作,但在Canvas元素上绘制文本的时 ...

  6. SVG之初识

    什么是SVG? 也许现在很多人都听说过SVG的人比较多,但不一定了解什么是SVG:SVG(Scalable Vector Graphics 一大串看不懂的英文)可伸缩矢量图形,它是用XML格式来定义用 ...

  7. SVG 学习(一)

    SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 使用 XML 格式定义图像. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Gr ...

  8. SVG的text使用

    SVG的text使用: 参考:http://www.docin.com/p-7393979.html <%@ page language="java" contentType ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第二章

    在网页中使用SVG 将SVG作为图像: SVG是一种图像格式,因此可以使用与其他图像类型相同的方式包含在HTML页面中,具体可以采用两种方法:将图像包含在HTML标记的<img>元素内(当 ...

随机推荐

  1. [js] 实现接口

    摘要 js 语言并没有interface implement 关键字,如果要做到和后端语言类似的接口,一般会需要模拟实现. 在oo 编程中, 接口可以让架构师规定好模块必须要实现的方法, 尽量解耦模块 ...

  2. 【JAVASCRIPT】event对象

    一.preventDefault  与 stopPropagation event.preventDefault() 和 event.stopPropagation() 不是JQuery的方法,是JS ...

  3. 快速搭建MySQL复制集

    快速搭建MySQL复制集 1 环境说明 MySQL版本 5.6 basedir :/u01/my3306 #MySQL软件目录 数据目录 :/u01/mysql/[实例名]/data 日志目录 :/u ...

  4. 移动APP云测试平台测评分析

    随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多.有专家预测,2017年的App应用下载量将会突破2500亿,整个移动科技市场规模将会达到770亿美元.身处在这个"移动&quo ...

  5. [补档]暑假集训D4总结

    考试 爆零了,不开心,打了两道自己以为是正解的东西,打了两道样例骗分,结果发现并没有给样例分= =,自己以为的正解也打挂了,所以就很= = 但是没办法啊,自己弱也不能怪谁,考试这东西有时候也很玄学. ...

  6. kafka使用场景

    kafka使用场景 消息 Kafka被当作传统消息中间件的替代品.消息中间件的使用原因有多种(从数据生产者解耦处理,缓存未处理的消息等).与大多数消息系统相比,Kafka具有更好的吞吐量,内置的分区, ...

  7. Linux入门基础知识

    注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. Linux入门基础知识 1. Unix和Linux发展历史 二者就像父子关系,当然Unix是老爹.1965年,MI ...

  8. HDU5727 Necklace(二分图匹配)

    Problem Description SJX has 2*N magic gems. N of them have Yin energy inside while others have Yang ...

  9. 整理自己的.net工具库

    前言 今天我会把自己平日整理的工具库给开放出来,提供给有需要的朋友,如果有朋友平常也在积累欢迎提意见,我会乐意采纳并补充完整.按照惯例在文章结尾给出地址^_^. 之前我开放其他源码的时候(Framew ...

  10. 【性能测试工具】- ApacheBench

    优点:提供的测试结果信息更完备:缺点:每次只能测试一个链接 概述: ab全称是ApacheBench,是 Apache 附带的一个HTTP性能测试小工具,可以同时模拟多个并发请求. 安装: Apach ...