首页 > 其他分享 >SolidJS-每日小知识(9/11)

SolidJS-每日小知识(9/11)

时间:2024-09-11 16:38:30浏览次数:1  
标签:11 ... const point SVG 知识 SolidJS Math 10

知识介绍

  1. 对指定SVG元素实现滚轮zoom

代码分析

1. 对指定SVG元素实现滚轮zoom

  1. 设置viewBox属性{x,y,w,h}以及缩放系数scale为信号量
  const [scale, setScale] = createSignal(1); // 初始缩放比例
  const [boxLocation, setboxLocation] = createSignal({ x: 0, y: 0 }); 
  const [boxSize, setboxSize] = createSignal({ w: 1000, h: 1000 }); 
  1. 读取点坐标数据后,设置SVG元素初始的viewBox属性
  onMount(async () => {
    try {
      const response = await fetch('./src/assets/dataset/matched_points_info.json');
      if (!response.ok) {
        throw new Error(`HTTP 错误!状态码:${response.status}`);
      }
      const jsonData: MatchData = await response.json();
      setData(jsonData);

      getViewBox();

    } catch (error) {
      console.error("加载数据时出错:", error);
    }
  });

  const getViewBox = () => {
    const allX = xpoints().map(point => point.coords[0]);
    const allY = xpoints().map(point => point.coords[1]);
    const minX = Math.min(...allX)-10;
    const maxX = Math.max(...allX)+10;
    const minY = Math.min(...allY)-10;
    const maxY = Math.max(...allY)+10;
    setboxLocation({ x: minX, y: minY });
    setboxSize({ w: maxX - minX, h: maxY - minY });
  };
  1. 设置滚轮事件,并进行事件处理
  const handleWheel = (event: WheelEvent) => {
    event.preventDefault();
    const newScale = scale() + (event.deltaY > 0 ? -0.1 : 0.1);
    setScale(newScale);
  };

  // 组件挂载和卸载时的事件处理
  createEffect(() => {
    const svgElement = document.querySelector('.match-svg');
    svgElement.addEventListener('wheel', handleWheel);

    onCleanup(() => {
      svgElement.removeEventListener('wheel', handleWheel);
    });
  });
  1. 在return的对应SVG元素中设置viewBox的参数
  return (
    <svg class="match-svg"
         viewBox={`${boxLocation().x} ${boxLocation().y} ${boxSize().w / scale()} ${boxSize().h / scale()}`} >
      <g>
        ......
      </g>
    </svg>
  );

标签:11,...,const,point,SVG,知识,SolidJS,Math,10
From: https://www.cnblogs.com/Frey-Li/p/18408456

相关文章

  • 面试-JS基础知识-作用域和闭包、this
    函数作为返回值functioncreate(){consta=100returnfunction(){console.log(a)//a在这里是自由变量,向上寻找}}constfn=create()consta=200fn()//100函数作为参数functionprint(fn){consta=13fn()}consta=100functionfn(......
  • P3911 最小公倍数之和
    原题链接《一道思维题(小trick)》\[ans=\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(a_i,a_j)\]当然正常莫反不能是这种形式的,可以观察到\(a_i\)的值域很小,只有\(5\times10^4\),所以我们去考虑直接枚举。$\quad$记\(c_{a_i}\)为\(a_i\)在序列中出现的个数,\(N\)为\(a_i\)......
  • Java小白一文讲清Java中集合相关的知识点(八)
    HashMap底层机制及源码剖析HashMap底层维护了Node类型的数组table,默认为null当创建对象时,将加载因子初始化为0.75;当添加key-value时,通过key的哈希值得到在table的索引,然后判断该索引处是否有元素,如果没有元素直接添加,如果该索引处有元素,继续判断该元素的key是否和......
  • Python系列(11)- 使用 Pipenv 搭建 Django + Rest Framework 开发环境
    Django是一个开放源代码的Web应用框架,用Python语言编写的。采用了MTV的框架模式,即模型Model,模版Template和视图View。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。Django:http://www.djangoproject.comGitHub:htt......
  • SpringBoot+Neo4j+Vue+Es集成ES全文检索、Neo4J知识图谱、Activiti工作流的知识库管理
    在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。【springboot+elasticsearch+neo4j+vue+activiti】实现数......
  • 第一章 网页制作的基础知识
    1.1认识网页和网站1.网页和网站以及重要常用术语网页和网站的区别:网页是由HTML编写,通过WWW网传输:功能主要展示信息网站是由多个网页的集合;功能多样化,能进行用户的交互重要常用术语:URL2.静态和动态网页静态网页和动态网页的区别静态网页HLML和CSS       ......
  • 第一章 网页制作的基础知识
    1.1认识网页网站1.1.1网页、网站网页和网站的区别:网页和网站之间的主要区别可以用表格对比的形式更清楚地说明,如下图所示:常用术语:Interner(全球性网络)WWW(万维网)URL(统一资源定位符,指定通信协议和地址)IP(网际协议)域名(网站名称,全世界唯一,书写格式:机构名.主机名.类别......
  • SSM三高患者健康食谱管理系统的设计与实现-附源码211633
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于三高患者健康食谱管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了三高患者健康食谱管理系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理......
  • 计算机网络知识点总结--适用于期末考试
    第一章 计算机网络概述1.计算机网络的类别1.1按分布范围分:广域网WAN,城域网MAN,局域网LAN, 个人区域网PAN1.2按使用者分:公用网,专用网1.3按交换技术分:电路交换报文交换分组交换1.4.按拓扑结构分:总线型,星型,环型,网状型1.5.按传输技术分:广播式网络 共享公共通信信......
  • 知识分享 | 轻松实现优质建模
    前言  在基于模型的开发(MBD)领域,模型的质量对于最终产品的成功至关重要。通过阅读本文,您可了解如何提升模型质量,并在整个开发过程中确保模型的一致性和质量。 什么是更好的建模?  更好的建模,也被称为是创建卓越软件模型的方法,对于开发高质量的软件至关重要。这一方法的......