Tyl*_*den 6 graphics svg dictionary transformation
当背景和位置坐标发生变化时,如何将文本或对象保持为固定大小?例如:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
width="100%" height="100%"
viewBox="0 0 50000 50000"
>
<circle cx="25000" cy="25000" r="100px" fill="red" />
</svg>
Run Code Online (Sandbox Code Playgroud)
在此代码中,圆圈不会是100像素,它将根据视图框大小进行缩放,因此它将很小.
例如,该问题在地图中表现出来.当您在地图上放大和缩小时,您希望代表城市位置的点和标签保持相同的大小,而不是在用户缩放时变大或变小.
将viewBox比例的倒数应用于半径,例如
var circle = document.getElementById('c');
var root = document.getElementById('root');
var matrix = circle.getCTM();
circle.r.baseVal.value /= matrix.a;Run Code Online (Sandbox Code Playgroud)
<svg id="root" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
width="100%" height="100%"
viewBox="0 0 50000 50000"
>
<circle id="c" cx="25000" cy="25000" r="100px" fill="red" />
</svg>Run Code Online (Sandbox Code Playgroud)
如果我将viewBox值加倍,则圆圈保持相同的大小.
var circle = document.getElementById('c');
var root = document.getElementById('root');
var matrix = circle.getCTM();
circle.r.baseVal.value /= matrix.a;Run Code Online (Sandbox Code Playgroud)
<svg id="root" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
width="100%" height="100%"
viewBox="0 0 100000 100000"
>
<circle id="c" cx="25000" cy="25000" r="100px" fill="red" />
</svg>Run Code Online (Sandbox Code Playgroud)
您可能希望使用椭圆,以便可以使用矩阵a和d值分别缩放x和y.
您可以做一些非常接近的事情:您可以使用嵌套的 svg 元素,其高度和宽度以 svg viewBox 对角线的百分比表示。如果您知道屏幕上 svg 的大小,则可以用百分比来近似 100px。
您还需要使用 viewBox 作为平移和缩放地图的方法。这适用于包含的任何元素文本;使用 % 单位作为字体大小并不引用 svg viewBox,因此获得恒定字体大小的唯一方法是,您需要封装在另一个大小为 % 单位的 svg 元素内。
注意:svg 虽然大小固定,但看起来会相对于内部 svg 的左上角进行缩放。
for(let i = 0; i < 12; i++) {
let a = (i - 4)*5
setTimeout(function() {
document.querySelector('#svg').setAttribute('viewBox',
`${a} ${a} ${100 - 2*a} ${100 - 2*a}`);
}, 500 * i);
}
Run Code Online (Sandbox Code Playgroud)
<svg id="svg" width="100px" height="100px" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>
<svg x='35' y='35' width='10%' height='10%' viewBox='0 0 100 100'>
<circle cx='50' cy='50' r='50' fill='red'/>
</svg>
<circle cx='65' cy='65' r='5%' fill='red'/>
<circle cx='35' cy='65' r='10' fill='red'/>
</svg>Run Code Online (Sandbox Code Playgroud)
`
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |