因为我们的图片尺寸是随机的,所以viewBox的设置也是根据图片的尺寸来设置的:
<template>
<div ref="container" class="content" id="container-rect"></div>
</template>
<script>
import * as d3 from "d3";
export default {
data() {
return {
svg: "",
mounted() {
this.svg = d3.select("#container-rect")
.append("svg")
.attr("id", "svg")
methods: {
// 将图片插入svg中
appendImg(imgUrl, res) {
// 获取到的可视区域宽高
let svgW = this.$refs.container.offsetWidth
let svgH = this.$refs.container.offsetHeight
this.svg
.attr("width", svgW)
.attr("height", svgH)
.attr("viewBox", [(res.img.width/2)-(svgW/2), (res.img.height/2)-(svgH/2), svgW, svgH])
this.svg
.append("g")
.attr("id", "image-g")
.append("image")
.attr("width", res.img.width)
.attr("height", res.img.height)
.attr("class", "control-img")
.attr("href", imgUrl)
</script>
https://zqy233.github.io/
svg
-zoom-drag-vue-demo/#/https://github.com/zqy233/
svg
-zoom-drag-vue-demo
上方两个自定义指令已经发布为npm包,可以直接安装使用
绑定两个命令到dom上
指令将绑定
元素
的第一个子
元素
当做
svg
,所以请注意绑定的
元素
这样设计是为了搭配
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容
居中
、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
项目中用到表格内画折线趋势图,本人使用的
svg
绘制简单折线;没有数据的单元格显示文字,为了不影响表格的宽度自适应,就想到在
svg
上写文字。于是就有了在
svg
上对文字样式进行垂直
居中
的需求,上代码:
<
svg
version="1.1" className={Style.
svg
Line}>
<text x='50%' y='50%' className={Style.s...
本主题演示了如何使用可缩放的向量图形 (
SVG
) 进行缩放和平移,并在结尾处提供了一个可进行缩放和平移的复杂组织结构图示例。假定你掌握了基本的 HTML 和 JavaScript 知识,并能访问可在 HTML5 中呈现内联
SVG
的浏览器(如 Windows Internet Explorer 9)。
创建
SVG
测试图
基于浏览器的
SVG
缩放和平移
基于 Java...
SVG
:android5.0+出现,w3c推出
使用xml 描述二维图形语言,矢量图,放大缩小无影响
为什么用
svg
,现在手机的短板是内存,不是cpu,
svg
通过cpu计算,png占用内存
Android上对
svg
进行阉割,使用Vector Drawable对
svg
支持,
svg
小
2.
svg
语法:
Vector 语法简介,如何看懂一张
svg
(1)Path指令解析如下所示:
M = moveto(M X,Y) :将画笔移动到指定的坐标位置,相当于 android Path 里的moveTo()
const
SVG
Parser = require('convertpath')
const parse =
SVG
Parser.parse('./test/test.
svg
', {
plugins: [
convertUseToGroup: t
SVG
( Scalable Vector Graphics),即可缩放矢量图形, 是基于XML( Extensible Markup
Language) 描述二维矢量图形的标记语言,由World Wide Web Consortium( W3C联盟,即万维网
联盟) 自1999年开始开发的开放标准。
文档中列出了7种基本图形
元素
及部分说明,可供参考。
获取
SVG
中g标签的宽度高度及位置坐标1.
问题
的出现对于普通的HTML
元素
,有很多获得其宽度width、高度height、距左left、距顶top等属性的方法:
类似offsetWidth,clientWidth,width之类的,通过查看DOM
元素
的属性可以一探究竟:
然而当遇到
SVG
的g标签的时候,却碰到
问题
了:
明明在开发者工具中可以显示的宽高、位置坐标等属性,通过原有的of
要计算
SVG
画布上显示区域的比例,需要首先获取
SVG
元素
的宽度和高度,可以通过DOM API中的getBoundingClientRect()方法来实现。具体实现代码如下:
const
svg
Element = document.querySelector('
svg
'); // 获取
SVG
元素
const
svg
Rect =
svg
Element.getBoundingClientRect(); // 获取
SVG
元素
的矩形对象
const
svg
Width =
svg
Rect.width; // 获取
SVG
元素
的宽度
const
svg
Height =
svg
Rect.height; // 获取
SVG
元素
的高度
const aspectRatio =
svg
Width /
svg
Height; // 计算
SVG
画布的宽高比例
接下来,可以通过
设置
一个比例因子来确定
SVG
文字的大小。比例因子可以根据实际需求进行调整。比如,如果需要让文字大小占据
SVG
画布高度的10%,可以
设置
比例因子为0.1。然后,根据
SVG
画布的宽高比例和比例因子来计算文字大小。具体实现代码如下:
const scaleFactor = 0.1; //
设置
比例因子
const fontSize = scaleFactor *
svg
Height / aspectRatio; // 计算
SVG
文字大小
最后,可以将计算得到的文字大小应用到
SVG
文本
元素
上。具体实现代码如下:
const textElement = document.querySelector('text'); // 获取
SVG
文本
元素
textElement.style.fontSize = `${fontSize}px`; //
设置
SVG
文本
元素
的字体大小
注意:以上代码中的计算方式仅适用于
SVG
画布宽高比例与浏览器窗口宽高比例相同的情况。如果
SVG
画布宽高比例与浏览器窗口宽高比例不同,需要根据实际情况进行调整。