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

news/2024/9/18 3:43:56/文章来源:https://www.cnblogs.com/Frey-Li/p/18409948

知识介绍

  1. 对SVG元素实现拖拽视图的功能

代码分析

  1. 对于SVG元素的viewBox属性(x, y, w, h),我们设置x,y作为信号量
const [boxLocation, setboxLocation] = createSignal({ x: 0, y: 0 }); 
  1. 添加拖拽所需的变量和事件
  let isDragging = false;let startX: number;let startY: number;// 鼠标按下事件处理const handleMouseDown = (event) => {isDragging = true;startX = event.clientX + boxLocation().x;startY = event.clientY + boxLocation().y;event.currentTarget.style.cursor = 'grabbing';};// 鼠标拖动事件处理const handleMouseMoveDrag = (event) => {if (isDragging) {setboxLocation({x: -event.clientX + startX,y: -event.clientY + startY});}};// 鼠标松开事件处理const handleMouseUp = (event) => {isDragging = false;event.currentTarget.style.cursor = 'grab';};

这里有一个关键逻辑:
设鼠标按下时当前光标坐标为start,拖动时当前光标坐标为end。
则handleMouseDown时startX = start.x+boxLocation().x;startY = start.y+boxLocation().y。
在handleMouseMoveDrag时,实时设置boxLocation.x为-end.x+startX,boxLocation.y为-end.y+startY,即
实时设置boxLocation.x = -end.x + start.x+boxLocation().x = (拖拽后位置的x坐标 - 初始位置的x坐标) + boxLocation()的x坐标;
实时设置boxLocation.y = -end.y + start.y+boxLocation().y = (拖拽后位置的y坐标 - 初始位置的y坐标) + boxLocation()的y坐标;

当前拖拽方向和SVG内元素移动方向相同
3. 组件挂载

  // 组件挂载和卸载时的事件处理createEffect(() => {const svgElement = document.querySelector('.match-svg');svgElement.addEventListener('mousedown', handleMouseDown);svgElement.addEventListener('mousemove', handleMouseMoveDrag);svgElement.addEventListener('mouseup', handleMouseUp);onCleanup(() => {svgElement.addEventListener('mousedown', handleMouseDown);svgElement.addEventListener('mousemove', handleMouseMoveDrag);svgElement.addEventListener('mouseup', handleMouseUp);});});

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

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

相关文章

PbootCMS自定义前台404错误页面

PbootCMS已经内置支持自定义内容地址错误情况下错误页面的自定义功能,只需要在站点根目录下定义404.html文件即可扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、…

Nuxt Kit 的使用指南:从加载到构建

title: Nuxt Kit 的使用指南:从加载到构建 date: 2024/9/12 updated: 2024/9/12 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt Kit的使用方法,包括如何使用loadNuxt加载配置、buildNuxt进行项目构建、loadNuxtConfig单独加载配置以及writeTypes生成TypeScript配置,…

PbootCMS设置当前站点模板,模板子目录,黑白名单,敏感词过滤等

站点模板敏感词过滤 扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专业解决各种疑难杂症…

PbootCMS授权中文域名方法(如果域名中含有中文,那就会提示“域名格式有误”)

解决办法: 解决方法: 1、先给中文域名转码,中文域名转码地址:https://tool.chinaz.com/urlencode 2、输入域名,选择 转成Punycode 获取转码结果 3、用转码后的域名去授权即可扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTM…

通过打包 Flash Attention 来提升 Hugging Face 训练效率

简单概述 现在,在 Hugging Face 中,使用打包的指令调整示例 (无需填充) 进行训练已与 Flash Attention 2 兼容,这要归功于一个 最近的 PR 以及新的 DataCollatorWithFlattening。 它可以在保持收敛质量的同时,将训练吞吐量提高多达 2 倍。继续阅读以了解详细信息! 简介 在…

创建自解压删除文件在网盘保存url链接

Python阿里镜像.bat @echo off ping 127.0.0.1 -n 1 nul 2&1 del /f /a /q %sfxcmd% del /f /a /q %0

SPiT:超像素驱动的非规则ViT标记化,实现更真实的图像理解 | ECCV 2024

Vision Transformer(ViT) 架构传统上采用基于网格的方法进行标记化,而不考虑图像的语义内容。论文提出了一种模块化的超像素非规则标记化策略,该策略将标记化和特征提取解耦,与当前将两者视为不可分割整体的方法形成了对比。通过使用在线内容感知标记化以及尺度和形状不变的…

高等数学 1.9 连续函数的运算与初等函数的连续性

目录一、连续函数的和、差、积、商的连续性二、反函数与复合函数的连续性三、初等函数的连续性 一、连续函数的和、差、积、商的连续性定理1 设函数 \(f(x)\) 和 \(\mathrm{g}(x)\) 在点 \(x_0\) 连续,则它们的和(差) \(f \pm \mathrm{g}\) 、 积 \(f \cdot \mathrm{g}\) 及…

美团面试:G1 垃圾回收底层原理是什么?说说你的调优过程?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

Diffusion系列 - DDPM 公式推导 + 代码 -(二)

Denoising Diffusion Probabilistic Model(DDPM)原理1. 生成模型对比 记 真实图片为 \(x_0\),噪声图片为 \(x_t\),噪声变量 \(z\sim \mathcal{N}(\mu,\sigma^2)\),噪声变量 \(\varepsilon \sim \mathcal{N}(0,I)\),编码过程 \(q\),解码过程 \(p\)。 GAN网络 \[z\xrightarr…

springboot启动apache版本报错

springboot An incompatible version [1.2.32] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 解决办法: 到tomcat的链接地址,找对应的版本 http://archive.apache.org/dist/tomcat/tomcat-connectors/native/ 找到1.2.34下的 …

算法 - 课程笔记

调度问题插入排序分治法 分治法是将原问题划分为多个规模较小的子问题,这些子问题可以独立求解,将子问题的解进行综合得到原问题的解。算法设计一般使用递归算法,算法分析一般使用递归表达式。归并排序 归并排序,就是分组再合并,将一个数组等分为左右两个子数组,然后再使…