svg平移、放大、缩小及js操作svg

在svg图形中,很重要的概念就是坐标系。首先分析一下width、height、viewBox这三个属性。

width:宽度,这个宽度是指在页面中实际使用的大小,跟div中定义width是同样的含义。

height:高度,含义同上。

viewBox:视图框,是一个由字符串表示的,格式:"0 0 2050 1000",--->(ULCx ULCy UUwidth UUheight)

ULCx 与 ULCy 分別代表「左上角 x」与「左上角 y」。UUwidth 与UUheight 分別代表「使用者单位宽度」与「使用者单位高度」

一般而言,会在使用者空间内,将 SVG 图形物件绘製到相对於使用者空间 (也就是使用者座标系统) 的位置。以相对静态的图形来缩放和移动瀏览时,SVG 图形物件通常绝不会在使用者座标系统中移动;而是使用者座标系统本身会在 (相对於) SVG 检视区中移动 (延著所有其附加的图形)。因此从检视区的观点来看,图形物件已经移动。也就是说,您通常是移动或转换附加图形物件的使用者座标系统,而非图形物件本身。


基於上述说明,ULCx、ULCy、UUwidth 与 UUheight 这四个数字的解释如下:
ULCx 与 ULCy - 会移动使用者座标系统 (会在裡面绘製图形物件) 的原点,这样该点 (ULCx, ULCy) 就会出现在定义的 SVG 检视区的左上角。也就是,将在检视区中移动使用者座标系统视觉化,这样使用者座标点 (ULCx、 ULCy) 就会发生在 SVG 检视区的左上角。这最后将会变成沿著所有「附加」的图形物件移动与检视区相对的使用者座标系统原点。
例如:

<svg width="300px" height="200px" viewBox="0 0 300 200">
在此例中,水平方向每 300 个使用者单位会有 300 像素,而垂直方向每 200 个使用者单位就会有 200 像素。换句话说,每个使用者单位等於一个像素。

<svg width="300px" height="200px" viewBox="0 0 600 400">

然而,在下列范例中,水平方向每 600 个使用者单位会有 300 像素 (或是每个使用者单位 0.5 像素),而垂直方向每 400 个使用者单位就会有 200 像素 (或是每个使用者单位 0.5 像素)。请注意,这项变更会造成所有的图形物件大小减半。

JS操作svg:

1、获取子元素:firstChild, firstElementChild,这是由于svg文件中可能会引入<?xml version="1.0" encoding="utf-8"?>这样的内容,这时firstChild就会表示这些非HTMLElement元素,包括空格、回车。

2、设置属性:setAttribute('name','value');

3、设置text标签的值:textSvg.firstChild.data ='40',或者使用textContent,其中有一个属性wholeText,但不可用,或者直接textSvg.textContent = '40';

例子一:创建一个circle

gearCircleElement = document.createElementNS("http://www.w3.org/2000/svg", "circle");
gearCircleElement.id = ‘circle’;
gearCircleElement.cx.baseVal.value = 34;
gearCircleElement.cy.baseVal.value = 43;
gearCircleElement.r.baseVal.value = 12;
gearCircleElement.style.fill = '#f00';

例子二:创建文本

gearTextElement = document.createElementNS("http://www.w3.org/2000/svg", "text");
gearTextElement.id = ‘text’;
gearTextElement.setAttribute("x", 67);
gearTextElement.setAttribute("y", 34);
gearTextElement.setAttribute("transform", "translate(3, -3)"); // Offset the text from the center of the circle.
gearTextElement.textContent = "##" ;
gearTextElement.setAttribute("font-size", 10);

例子三:创建直线

gearLineElement = document.createElementNS("http://www.w3.org/2000/svg", "line");
gearLineElement.id = "line";
gearLineElement.x1.baseVal.value = 3;
gearLineElement.y1.baseVal.value = 56;
gearLineElement.x2.baseVal.value = 12;
gearLineElement.y2.baseVal.value = 43;
gearLineElement.style.stroke = "white";


lie



j


jsc

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用JavaScript监听SVG平移操作,你可以使用以下步骤: 1. 获取SVG元素:首先,使用JavaScript的`querySelector`或`getElementById`等方法获取到你想要监听平移操作SVG元素。例如,可以使用`document.querySelector('#svgId')`来获取具有特定ID的SVG元素。 2. 添加事件监听器:使用`addEventListener`方法为SVG元素添加事件监听器。在这种情况下,你可以监听鼠标按下、移动和释放事件来实现平移操作。例如,可以使用以下代码为SVG元素添加平移操作的事件监听器: ```javascript const svgElement = document.querySelector('#svgId'); let isDragging = false; let startCoords = { x: 0, y: 0 }; svgElement.addEventListener('mousedown', function(event) { isDragging = true; startCoords = { x: event.clientX, y: event.clientY }; }); svgElement.addEventListener('mousemove', function(event) { if (isDragging) { const dx = event.clientX - startCoords.x; const dy = event.clientY - startCoords.y; svgElement.setAttribute('transform', `translate(${dx}, ${dy})`); } }); svgElement.addEventListener('mouseup', function(event) { isDragging = false; }); ``` 3. 在事件处理函数中执行平移操作:在平移操作的事件处理函数中,根据鼠标移动的距离,计算出需要平移的距离,并使用SVG的`transform`属性来设置平移变换。在上述代码中,我们使用鼠标按下时的坐标和当前鼠标位置的差值来计算平移距离,并将其应用到SVG元素的`transform`属性中。 请注意,上述代码仅为一个基本示例,具体的平移逻辑和操作可以根据你的需求进行调整。同时,还可以根据需要添加其他功能,如限制平移范围、平滑动画等。希望对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值