javascript - 缩放 SVG 但仅此而已?

标签 javascript html css svg d3.js

我仍在玩弄 D3 并绘制 SVG 元素,我决定尝试制作一个可以根据触控板(双指触摸扩展)和可能是 shift + 滚轮移动进行缩放的图形,但离开其他一切照原样。当我尝试这些 Action 时,我注意到整个页面都在缩放。不幸的是,我不知道如何让它发挥作用。

$('#target').html('<svg height="200" width="200"><rect width="100" height="100" x="50" y="50" fill="red" /></svg>');
#top, #bottom {
    position: fixed;
    left: 0;
    background-color: #000;
    height: 25px;
    width: 100%;
}
#target {
    margin: 25px 0;
}
#top {
    top: 0;
}
#bottom {
    bottom: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="top"></div>
<div id="target"></div>
<div id="bottom"></div>

所以,这是我想出的规则:

  • 顶部和底部的 DIV 无法缩放。必须保持比例因子 1。
  • 更改浏览器尺寸不会更改 SVG 的比例。
  • 使用任何缩放方法(双指缩放、shift + 滚轮等)应该只会影响 SVG。
  • 缩放 SVG 以使绘制的矩形不在视口(viewport)之外,不应阻止我们滚动或拖动以查看 SVG 的其余部分。

有谁知道如何制作这样的作品?也许某个地方有教程可以解释这一点?

谢谢!

PS - 如果 iframe 有助于解决此问题,我不反对使用 iframe。

最佳答案

因此,经过大量实验,我使用以下方法完成了这项工作:

  • display: CSS 中的 flex 是让 SVG 容器占用所有可用空间的最佳解决方案。当 SVG 较大时,放置溢出:在该容器上滚动会有所帮助。
  • 在文档和容器上放置一个“滚动”监听器,并在 scrollWheel 值为 120 或 -120 时阻止默认/停止立即传播。这允许在任何地方滚动(这很好),但您随后可以在容器上使用此信息进行“缩放”。
  • 在 SVG 上使用 viewBox 属性而不是在 CSS 中缩放。如果您使用缩放,则 SVG 变得像素化到您缩放它越大。但是,调整 SVG 的高度/宽度,同时将 viewBox 保持在“0 0 [width] [height]”,无论缩放多少,它都能保持清晰。

关于javascript - 缩放 SVG 但仅此而已?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862587/

相关文章:

html - 单击时 CSS 样式的复选框不起作用

html - 如何在段落中组合工具提示标签和段落边距标签?

PHP - 选择单选按钮后直接显示消息

javascript - 缺乏对 AJAX 预加载的理解(附示例)

javascript - 使用Javascript函数将td的onclick设置为null

html - 单选按钮选项卡排序

html - 为特定宽度的内容主体居中 iframe 内容

javascript - 获取一行以使用 HTML/CSS 显示

html - Bootstrap 3 轮播不工作

javascript - 如何使用 Javascript 触发 CSS3 淡入效果?