突破编程_前端_SVG(使用 svg-pan-zoom 库进行平移与缩放)

1 svg-pan-zoom 概述

svg-pan-zoom 是一个轻量级、高性能且易于使用的 JavaScript 库,专为增强 SVG 图像的浏览体验而设计。它提供了平移和缩放功能,使用户能够无缝探索大型或复杂的 SVG 图形。这个库允许用户对SVG图像进行交互操作,包括缩放、平移和旋转等,从而提供了更加灵活和交互式的 SVG 浏览体验。

在 svg-pan-zoom 中,可以通过配置选项来定制SVG的平移和缩放行为。例如,可以设置是否启用平移和缩放功能,控制缩放操作的敏感度,限制用户可以缩放到的最小和最大级别,以及调整SVG图像在视口中的显示方式等。此外,svg-pan-zoom 还提供了回调函数和事件处理机制,允许开发者在特定的 SVG 操作之前或之后执行自定义代码,以及处理自定义的 SVG 事件。

通过使用 svg-pan-zoom,开发者可以轻松地在他们的应用中实现交互式的 SVG 地图、图表或其他可视化元素,从而提升用户体验和应用的交互性。无论是在 Web 应用、移动应用还是桌面应用中,svg-pan-zoom 都能为 SVG 图像提供出色的浏览和交互功能。

2 svg-pan-zoom 的基本使用

2.1 引入 svg-pan-zoom

(1)通过 npm 安装 svg-pan-zoom

进入到指定的开发目录下,初始化 npm 项目(如果你的目录还不是一个 npm 项目,你需要初始化它。这将会创建一个 package.json 文件,其中包含你的项目依赖和其他元数据)。

npm init -y

(2)安装 svg-pan-zoom

使用 npm 安装 svg-pan-zoom 包。

npm install svg-pan-zoom --save

(3)在项目中引入 svg-pan-zoom

  • 可以使用 require 或 import 语句来引入 svg-pan-zoom。
// 使用 CommonJS 语法(Node.js)  
const svgPanZoom = require('svg-pan-zoom');  // 或者使用 ES6 语法(例如,在模块化的前端项目中)  
import svgPanZoom from 'svg-pan-zoom';
  • 也可以通过 <script> 标签直接引入:
<script src="node_modules/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>

2.2 初始化 svg-pan-zoom

如下为样例代码:

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>SVG Pan Zoom Example</title>  <style>  /* 确保 SVG 元素有足够的空间来展示和缩放 */  #mySvg {  width: 400px;  height: 200px;  border: 1px solid black;  }  </style>  
</head>  
<body>  <svg id="mySvg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 200">  <!-- 你的 SVG 内容 -->  <rect x="50" y="50" width="100" height="50" fill="lightblue" />  <!-- ... 其他 SVG 元素 ... -->  </svg>  <!-- 引入 svg-pan-zoom 库(请确保路径正确) -->  <script src="node_modules/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>  <script>  // 等待 DOM 完全加载  document.addEventListener('DOMContentLoaded', function() {  // 获取 SVG 元素  var svgElement = document.getElementById('mySvg');  // 初始化 svg-pan-zoom  var obj = svgPanZoom(svgElement, {  // 这里可以配置选项,比如:  zoomEnabled: true, // 允许缩放  panEnabled: true,  // 允许平移  maxZoom: 10,       // 设置最大缩放级别  minZoom: 0.1,      // 设置最小缩放级别  // ... 其他配置选项 ...  });  // 你可以在这里添加更多的事件监听器或逻辑  });  </script>  
</body>  
</html>

在这里插入图片描述

上面的示例做了以下几件事情:

  • 创建了一个带有 id=“mySvg” 的 SVG 元素,并设置了 viewBox 属性以定义其坐标系统。
  • 引入了 svg-pan-zoom 的 JavaScript 文件。请注意,路径 node_modules/svg-pan-zoom/dist/svg-pan-zoom.min.js 是假设已经通过 npm 将 svg-pan-zoom 安装到了 node_modules 目录下。在实际部署时,可能需要将库文件复制到你的静态资源目录,并通过正确的 URL 引用它。
  • 在 DOMContentLoaded 事件触发后,我们获取了 SVG 元素的引用,并使用 svgPanZoom 函数初始化了一个实例。我们传递了 SVG 元素本身以及一个配置对象作为参数。在这个配置对象中,我们启用了缩放和平移功能,并设置了最大和最小缩放级别。
  • 初始化完成后,可以根据需要添加更多的事件监听器或逻辑来处理平移和缩放事件。

2 svg-pan-zoom 的属性

如下是 svg-pan-zoom 的属性的示例:

let panZoomTiger = svgPanZoom('#demo-tiger', {viewportSelector: '.svg-pan-zoom_viewport'
, panEnabled: true
, controlIconsEnabled: false
, zoomEnabled: true
, dblClickZoomEnabled: true
, mouseWheelZoomEnabled: true
, preventMouseEventsDefault: true
, zoomScaleSensitivity: 0.2
, minZoom: 0.5
, maxZoom: 10
, fit: true
, contain: false
, center: true
, refreshRate: 'auto'
, beforeZoom: function(){}
, onZoom: function(){}
, beforePan: function(){}
, onPan: function(){}
, onUpdatedCTM: function(){}
, customEventsHandler: {}
, eventsListenerElement: null
});

以下是配置属性的详细解释:

svg-pan-zoom 是一个强大的库,用于为 SVG 元素提供平移和缩放功能。以下是你提供的配置属性的详细解释:

  1. viewportSelector:

    • 描述: 这是一个选择器字符串,用于确定哪个元素将作为 SVG 的视口(viewport)。视口是 SVG 图像显示的区域。
    • : 一个 CSS 选择器字符串,例如 ‘.svg-pan-zoom_viewport’。
    • 用途: 将 SVG 图像嵌入到一个特定的容器中,并由这个容器的大小决定 SVG 的视口大小。
  2. panEnabled:

    • 描述: 是否启用平移功能。
    • : true 或 false。
    • 用途: 控制用户是否可以通过拖动鼠标来平移 SVG 图像。
  3. controlIconsEnabled:

    • 描述: 是否显示控制图标(如缩放和平移按钮)。
    • : true 或 false。
    • 用途: 如果你不希望显示默认的控制图标,可以将其设置为 false。
  4. zoomEnabled:

    • 描述: 是否启用缩放功能。
    • : true 或 false。
    • 用途: 控制用户是否可以通过鼠标滚轮或双击来缩放 SVG 图像。
  5. dblClickZoomEnabled:

    • 描述: 是否启用双击缩放功能。
    • : true 或 false。
    • 用途: 当用户双击 SVG 图像时,是否触发缩放操作。
  6. mouseWheelZoomEnabled:

    • 描述: 是否启用鼠标滚轮缩放功能。
    • : true 或 false。
    • 用途: 控制用户是否可以通过滚动鼠标滚轮来缩放 SVG 图像。
  7. preventMouseEventsDefault:

    • 描述: 是否阻止默认的鼠标事件。
    • : true 或 false。
    • 用途: 当设置为 true 时,库会尝试阻止某些默认的鼠标事件,以避免与 SVG-pan-zoom 的交互发生冲突。
  8. zoomScaleSensitivity:

    • 描述: 缩放操作的敏感度。
    • : 一个数字,例如 0.2。
    • 用途: 控制每次缩放操作导致的缩放级别变化的大小。
  9. minZoommaxZoom:

    • 描述: SVG 图像的最小和最大缩放级别。
    • : 数字,例如 0.5 和 10。
    • 用途: 限制用户可以缩放到的最小和最大级别。
  10. fit:

    • 描述: 是否在初始化时自动调整 SVG 的大小和位置,以适应视口。
    • : true 或 false。
    • 用途: SVG 图像在加载时自动适应其容器的大小。
  11. contain:

    • 描述: 当启用时,确保 SVG 图像始终完全显示在视口中,即使缩放级别很高。
    • : true 或 false。
    • 用途: 控制 SVG 图像是否始终在视口内完全可见。
  12. center:

    • 描述: 当启用时,SVG 图像会在视口中居中显示。
    • : true 或 false。
    • 用途: 控制 SVG 图像是否默认在视口中居中。
  13. refreshRate:

    • 描述: 刷新率设置,用于控制平移和缩放操作的平滑度。
    • : ‘auto’ 或一个数字(表示每秒的帧数)。
    • 用途: 当更精细地控制平移和缩放操作的性能。
  14. beforeZoom, onZoom, beforePan, onPan, onUpdatedCTM:

    • 描述: 这些是回调函数,用于在特定的 SVG 操作之前或之后执行自定义代码。
    • : 函数。
    • 用途: 允许开发者在平移、缩放或其他操作时执行自定义逻辑。
  15. customEventsHandler:

    • 描述: 一个对象,用于处理自定义事件。
    • : 一个对象,其属性是事件名称,值是处理这些事件的函数。
    • 用途: 允许开发者定义和处理自定义的 SVG 事件。
  16. eventsListenerElement:

    • 描述: 指定哪个元素应该监听平移和缩放事件。默认情况下,svg-pan-zoom 会在 SVG 元素本身上监听这些事件。但如果你希望在其他元素(比如一个覆盖层或特定的按钮)上监听这些事件,并触发 SVG 的平移和缩放,你可以使用这个选项来指定那个元素。
    • : 一个 DOM 元素或选择器的字符串。
    • 用途: 当应用结构需要更复杂的交互逻辑时,这个选项会很有用。

在配置 svg-pan-zoom 时,这些选项提供了丰富的定制性,使你能够根据你的具体需求来调整 SVG 的平移和缩放行为。

例如,如果你有一个响应式设计的网站,并且希望 SVG 图像能够随着视口大小的变化而自动调整大小和位置,你可以设置 fit 为 true,并可能还要设置 contain 为 true 以确保图像始终在视口中可见。

如果你想要更精细地控制用户的交互体验,你可以使用回调函数(如 beforeZoom 和 onZoom)来添加动画效果、更新 UI 元素或执行其他逻辑。

最后,通过调整 zoomScaleSensitivity、minZoom 和 maxZoom 等选项,你可以确保 SVG 图像的缩放级别在合理的范围内,并为用户提供平滑而一致的缩放体验。

3 svg-pan-zoom 的常用接口

  1. zoomIn():

    • 描述: 放大 SVG 元素。
    • 示例: svgPanZoomInstance.zoomIn();
  2. zoomOut():

    • 描述: 缩小 SVG 元素。
    • 示例: svgPanZoomInstance.zoomOut();
  3. reset():

    • 描述: 将 SVG 元素的视图重置到初始状态,包括缩放和平移。
    • 示例: svgPanZoomInstance.reset();
  4. panBy(dx, dy):

    • 描述: 按照指定的 x(dx)和 y(dy)偏移量平移 SVG 元素。
    • 示例: svgPanZoomInstance.panBy(100, 50); 这将使 SVG 元素向右移动 100 个单位,并向下移动 50 个单位。
  5. zoomAtPoint(scale, point):

    • 描述: 将 SVG 元素缩放到指定的缩放级别(scale)。
    • 参数: scale:目标缩放级别。大于 1 的值表示放大,小于 1 但大于 0 的值表示缩小。point:一个包含 x 和 y 坐标的对象,指定缩放操作的中心点。
    • 示例: svgPanZoomInstance.zoomAtPoint(2); 这将 SVG 元素放大到两倍大小。

样例代码如下:

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>SVG Pan Zoom Example</title>  <style>  /* 确保 SVG 元素有足够的空间来展示和缩放 */  #mySvg {  width: 400px;  height: 200px;  border: 1px solid black;  }  </style>  
</head>  
<body>  <svg id="mySvg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 200">  <!-- 你的 SVG 内容 -->  <rect x="50" y="50" width="100" height="50" fill="lightblue" />  <!-- ... 其他 SVG 元素 ... -->  </svg>  <!-- 引入 svg-pan-zoom 库(请确保路径正确) -->  <script src="node_modules/svg-pan-zoom/dist/svg-pan-zoom.js"></script>  <script>  // 等待 DOM 完全加载  document.addEventListener('DOMContentLoaded', function() {  var svgElement = document.getElementById('mySvg');  var svgPanZoomInstance = svgPanZoom(svgElement, {  // 配置选项  });  // 假设我们有一个事件监听器,当用户点击 SVG 元素时触发缩放  svgElement.addEventListener('click', function(event) {  var rect = svgElement.getBoundingClientRect();  var point = {  x: event.clientX - rect.left,  y: event.clientY - rect.top  };  // 以点击点为中心放大到两倍大小  svgPanZoomInstance.zoomAtPoint(2, point);  });});  </script>  
</body>  
</html>
  1. getSizes():

    • 描述: 返回当前 SVG 元素和视口的大小信息。
    • 返回值: 一个对象,包含 SVG 元素和视口的宽度和高度。
  2. destroy():

    • 描述: 销毁 svg-pan-zoom 实例,移除所有事件监听器和功能。
    • 示例: svgPanZoomInstance.destroy();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数据模型应用:数字化转型的关键引擎

一、引言 在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业运营、决策和创新的核心要素。企业数据模型作为数据管理的核心工具&#xff0c;正逐渐成为企业数字化转型的重要引擎。本文将深入探讨企业数据模型的基本概念、应用场景、挑战与对策&#xff0c;以及其在数字…

NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]

NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2SQL、Text2DSL] Text-to-SQL&#xff08;或者Text2SQL&#xff09;&#xff0c;顾名思义就是把文本转化为SQL语言&#xff0c;更学术一…

数据结构——双向循环链表

目录 前言 一、链表的分类 二、双向循环链表 2.1 开辟新的节点 2.2 链表初始化 2.3 打印链表 2.4 链表的尾插 2.5 链表的头插 2.6 链表的尾删 2.7 链表的头删 2.8 查找链表 2.9 在pos位置之后插入数据 2.10 删除pos位置的数据 三、完整代码实现 四、顺序表和双向…

【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;read函数&#xff08;2&#xff09;虚拟存储&#xff08;3&#xff09;用户态&#xff08;4&#xff09;线程特点&#xff08;5&#xff09;缺页处理&#xff08;6&#xff09;调度算法&#xff08;7&#xff09;进程优先…

服务器Linux搭建NPM私有仓库

服务器Linux搭建NPM私有仓库 环境搭建 安装 nodejs nodejs官网&#xff1a;https://nodejs.org/en/download/package-manager 可以去官网自行下载nodejs的Linux版本&#xff0c;但是出于别的原因考虑&#xff0c;可以使用nvm去下载nodejs这样会切换nodejs也方便。 nvm 这…

整数运算超越存储单元表示范围:上溢出、下溢出、回绕

示例&#xff1a; /*** brief how about integer-underflow-overflow? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <std…

P5730 【深基5.例10】显示屏

思路&#xff1a; 此题只需要两层循环&#xff0c;通过数组映射即可求出答案 AC代码&#xff1a; #include<iostream>using namespace std;typedef long long ll; const int N 10; int a[N];int main() {ll n,m;cin >> n >> m;for(ll in;i<m;i){ll nu…

leetcode:42.接雨水

单调栈解题思路&#xff1a; 需要知道当前遍历到的元素左边和右边第一个比该元素大的元素。 如果当前遍历到的元素大于栈顶元素&#xff0c;则该元素为栈顶元素右边第一个比它大的元素&#xff0c;此时&#xff0c;栈顶元素的栈内相邻元素是该元素左边第一个比它大的元素。【…

如何自己制作一个网址二维码,可追踪扫描数据?

我们最近收到许多这样的咨询&#xff1a;如何生成能够追踪扫描次数的二维码&#xff1f;那么通过今天的文章&#xff0c;您就可以了解到什么样的二维码可以追踪扫描数据&#xff1f;以及如何制作能够追踪扫描数据的二维码&#xff1f; 一、哪种二维码可以追踪扫描数据&#xf…

智慧园区开启未来之门:揭秘科技创新如何引领园区发展,构建智慧化生活新场景

随着科技的飞速发展和全球经济的深度融合&#xff0c;智慧园区以其前瞻性的理念、创新的技术和卓越的成果&#xff0c;正成为引领城市发展和产业升级的新引擎。本文将深入探讨智慧园区如何借助科技创新的力量&#xff0c;引领园区发展&#xff0c;并构建智慧化生活新场景&#…

Linux三剑客之awk篇

目录 1、awk 1.1、awk参数 1.2、awk变量 1.3、awk分割符 1.3.1、FS 1.3.2、OFS 1.3.3、RS 1.3.4、ORS 1.3.5、NF 1.3.6、NR 1.3.7、FNR 1.3.8、FILENAME 1.3.9、ARGC与ARGV 1.4、自定义变量 1.5、printf格式化输出 1、awk 作用&#xff1a;具有强大的文本格式化…

代码随想录刷题随记23-回溯3

代码随想录刷题随记23-回溯3 39. 组合总和 leetcode链接 注意同一个 数字可以 无限制重复被选取 怎么体现这个可以重复取的思想很重要 解题代码&#xff1a; class Solution { public:void backtrace( vector<vector<int>>& ret,vector<int> &pat…

腾讯清华联合提出图像到视频生成方法-Follow-Your-Click:点击图像并加上简单提示词就可让图像动起来!

Follow-Your-Click只需单击一次和简短的提示就可以让图像的某一部分动起来&#xff0c;还支持不同的动作表达&#xff0c;比如微笑&#xff0c;悲伤&#xff0c;跳舞…… 相关链接 论文链接&#xff1a;https://arxiv.org/abs/2403.08268 项目链接&#xff1a;https://github…

vue.js入门

vue是一个渐进js框架 渐进式:按需引入Vue.js的部分功能,不用把整个框架都导入 1. 传统开发方式 用vue.global.js <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"…

当当图书网数据采集分析:10万条数据的深入洞察

基于搜索结果&#xff0c;我将为您提供一个关于当当图书网数据采集的文章框架&#xff0c;假设我们已经有了10万条数据的采集结果。请注意&#xff0c;由于没有具体的数据文件&#xff0c;以下内容将是一个示例性的框架&#xff0c;您可以根据实际采集到的数据进行填充和调整。…

1.2MHz,固定频率白光LED驱动器

一、产品概述 TX6216是一款升压转换器&#xff0c;设计用于通过单节锂离子电池驱动多达7个串联的白光LED。 TX6216采用电流模式&#xff0c;固定频率架构来调节LED电流&#xff0c;LED电流通过外部电流检测电阻测量。其低104mV反馈电压可降低功率损耗并提高效率。 TX6216具有…

懒人建站工具过时了?试试这6个WordPress主题,1小时实现高效建站

懒人建站工具&#xff0c;凭借简单易用、快速上手和个性化定制的特点&#xff0c;为不熟悉代码和程序的人提供了搭建美观实用网站的便捷途径。无需专业的前端开发知识&#xff0c;无需雇佣专业开发人员&#xff0c;用户便能轻松实现网站搭建&#xff0c;满足个人或企业需求。懒…

13.C++常用的算法_查找算法

文章目录 遍历算法1. adjacent_find代码工程运行结果 2. binary_search()代码工程运行结果 3. count()代码工程运行结果 4. count_if()代码工程运行结果 遍历算法 1. adjacent_find 代码工程 查找相邻元素是否存在,不存在返回容器最后位置的迭代器#define _CRT_SECURE_NO_WA…

Rustdesk如何编译代码实现安装后,不会在右下角出现托盘图标

环境&#xff1a; Rustdesk1.1.9 问题描述&#xff1a; Rustdesk如何编译代码实现安装后&#xff0c;不会在右下角出现托盘图标 解决方案&#xff1a; 安装后只有自定义进程图标 详细方案&#xff0c;有需要私聊

2023年城市交通系统客流量预测算法赛

ref: 2023中国华录杯数据湖算法大赛 该比赛马上就要结束&#xff0c;0424日答辩。获得了前六的名次&#xff0c;本次比赛给我的感觉就是一言难尽呐。答辩结束再补充吧。