「San」监听DOM变化的方法
在 San框架 中监听组件内部字体大小并调整宽度,可以结合 自定义事件 或 数据绑定 来实现动态调整。San 框架没有直接的监听 DOM 尺寸变化的内置方法,但可以通过以下步骤实现:
方法一:使用 ResizeObserver 监听字体变化
在组件的 attached 生命周期中,使用 ResizeObserver 来监听组件内部的 DOM 元素变化,并更新 San 组件的数据。
示例代码
import { Component } from 'san';export default class MyComponent extends Component {initData() {return {width: 'auto'};}attached() {const targetElement = this.ref('content');const resizeObserver = new ResizeObserver((entries) => {for (const entry of entries) {const contentRect = entry.contentRect;const fontSize = parseFloat(window.getComputedStyle(entry.target).fontSize);this.data.set('width', `${fontSize * 2}px`); // 动态调整宽度}});if (targetElement) {resizeObserver.observe(targetElement);}// 确保观察器在组件销毁时释放资源this.resizeObserver = resizeObserver;}detached() {if (this.resizeObserver) {this.resizeObserver.disconnect();}}static template = `<div class="my-component" style="width: {{width}}"><div ref="content" class="content">{{text}}</div></div>`;
}
关键点:
this.ref('content')引用内部 DOM 元素。- 使用
ResizeObserver动态监听字体大小变化。 - 宽度通过 San 的数据绑定动态更新。
方法二:手动触发字体变化的监听逻辑
如果字体大小是通过组件的 data 或 props 动态设置,可以监听数据变化,并在 watch 或事件中更新宽度。
示例代码
import { Component } from 'san';export default class MyComponent extends Component {initData() {return {fontSize: 16,width: 'auto'};}inited() {this.watch('fontSize', (fontSize) => {const width = fontSize * 2; // 依据字体大小计算宽度this.data.set('width', `${width}px`);});}static template = `<div class="my-component" style="width: {{width}}"><div class="content" style="font-size: {{fontSize}}px">{{text}}</div></div>`;
}
关键点:
- 使用
watch方法监听字体大小的变化。 - 通过
data绑定宽度和字体大小。
方法三:结合 MutationObserver
在 attached 生命周期中,通过 MutationObserver 监听内部 DOM 元素的样式变化。
示例代码
import { Component } from 'san';export default class MyComponent extends Component {attached() {const targetElement = this.ref('content');const observer = new MutationObserver(() => {const fontSize = parseFloat(window.getComputedStyle(targetElement).fontSize);this.data.set('width', `${fontSize * 2}px`);});if (targetElement) {observer.observe(targetElement, {attributes: true,attributeFilter: ['style', 'class']});}this.observer = observer;}detached() {if (this.observer) {this.observer.disconnect();}}static template = `<div class="my-component" style="width: {{width}}"><div ref="content" class="content">{{text}}</div></div>`;
}
关键点:
- 使用
MutationObserver监听style或class的变化。 - 在
detached生命周期中断开观察器。
方法四:CSS 自适应方案(无需 JS)
如果字体大小和宽度的关系可以直接用 CSS 描述,可以通过 em 或 calc() 实现自动调整。
示例代码
.my-component {display: inline-block;width: calc(1.5em + 10px); /* 根据字体大小自动调整宽度 */
}.content {font-size: 16px;
}
San 模板
export default class MyComponent extends Component {static template = `<div class="my-component"><div class="content">{{text}}</div></div>`;
}
选择合适方案
- 字体大小频繁变化:
ResizeObserver更加高效。 - 依赖 San 数据绑定:通过
watch或直接监听数据更简单。 - 简单静态布局:使用 CSS 自适应可以避免额外开销。
相关文章:
「San」监听DOM变化的方法
在 San框架 中监听组件内部字体大小并调整宽度,可以结合 自定义事件 或 数据绑定 来实现动态调整。San 框架没有直接的监听 DOM 尺寸变化的内置方法,但可以通过以下步骤实现: 方法一:使用 ResizeObserver 监听字体变化 在组件的 …...
如何选择服务器
如何选择服务器 选择服务器时应考虑以下几个关键因素: 性能需求。根据网站的预期流量和负载情况,选择合适的处理器、内存和存储容量。考虑网站是否需要处理大量动态内容或高分辨率媒体文件。 可扩展性。选择一个可以轻松扩展的服务器架构,以便…...
嵌入式驱动面试总结
操作系统: 中断的处理流程,中断处理需要注意些什么 软中断和硬中断区别 linux驱动用过那些锁,信号量,互斥锁 自旋锁和互斥锁的区别 二值信号量和互斥信号量有什么区别 进程锁怎么实现的,说一下流程; …...
Uniapp 简单配置鸿蒙
Uniapp 简单配置鸿蒙 前言下载并配置鸿蒙IDEHbuilder X 配置基本的信息生成相关证书登录官网获取证书IDE配置证书添加调试设备可能出现的问题前言 如今鸿蒙的盛起,作为多端开发的代表也是开始兼容鸿蒙应用的开发,接下来我将介绍如何在uniapp中配置鸿蒙。 注意:hbuilder X的…...
线程池的实现与应用
一、线程池 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,…...
基于Java Springboot单位考勤系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
近源渗透|HID ATTACK从0到1
前言 对于“近源渗透”这一术语,相信大家已经不再感到陌生。它涉及通过伪装、社会工程学等手段,实地侵入企业办公区域,利用内部潜在的攻击面——例如Wi-Fi网络、RFID门禁、暴露的有线网口、USB接口等——获取关键信息,并以隐蔽的…...
【linux】插入新硬盘如何配置:格式化、分区、自动挂载(Ubuntu)
文章目录 具体方法GPT分区表(GUID Partition Table)(建议都用这种分区方法)MBR分区表方法(最大支持2TB分区)(Master Boot Record) 附加:如何查看硬盘的型号另外ÿ…...
YOLOv8-ultralytics-8.2.103部分代码阅读笔记-block.py
block.py ultralytics\nn\modules\block.py 目录 block.py 1.所需的库和模块 2.class DFL(nn.Module): 3.class Proto(nn.Module): 4.class HGStem(nn.Module): 5.class HGBlock(nn.Module): 6.class SPP(nn.Module): 7.class SPPF(nn.Module): 8.class C1(nn.M…...
代码随想录算法训练营第五十三天|Day53 图论
字符串接龙 https://www.programmercarl.com/kamacoder/0110.%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8E%A5%E9%BE%99.html 思路 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX 1000 // 假设最大字符串数 #define WORD_LENGTH 100 // 假…...
LeetCode:203.移除链表元素
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:203.移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.…...
知识见闻 - 数学: 均方根 Root Mean Square
What is Root Mean Square (RMS)? 在统计学上,均方根(RMS)是均方的平方根,而均方是一组数值的平方的算术平均数。均方根也称为二次均值,是指数为 2 的广义均值的一种特例。均方根也被定义为基于一个周期内瞬时值的平方…...
机器硬件调优
grub参数 ipv6.disable1 ipv6.autoconf0 intel_pstatedisable nohzoff idlepoll intel_idle.max_cstate0 processor.max_cstate0 mceignore_ce nmi_watchdog0 transparent_hugepagenever pcie_aspm.policyperformance audit0 irqaffinity0 nosoftlockup grub2-mkconfig -o /bo…...
如何更改手机GPS定位
你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容?接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置!无论是在玩Pokmon GO游戏、发布社媒贴子,这种方法都快速、简单且有效。 第一步:下…...
HarmonyOS(57) UI性能优化
性能优化是APP开发绕不过的话题,那么在HarmonyOS开发过程中怎么进行性能优化呢?今天就来总结下相关知识点。 UI性能优化 1、避免在组件的生命周期内执行高耗时操作2、合理使用ResourceManager3、优先使用Builder方法代替自定义组件4、参考资料 1、避免在…...
Mysql的加锁情况详解
最近在复习mysql的知识点,像索引、优化、主从复制这些很容易就激活了脑海里尘封的知识,但是在mysql锁的这一块真的是忘的一干二净,一点映像都没有,感觉也有点太难理解了,但是还是想把这块给啃下来,于是想通…...
hive3.1.2编译spark3安装包
此安装包是《去破解站长》在公司真实生产环境所使用的安装包。 引言:Hive引擎包括:默认MR、tez、sparkDownload:www.qupojie.com 1、Hive on Spark 1、Hive onSpark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法&…...
网络安全,文明上网(1)享科技,提素养
前言 在这个信息化飞速发展的时代,科技的快速进步极大地丰富了我们的生活,并为我们提供了无限的可能性。然而,随着网络世界的不断扩张,增强我们的网络素养成为了一个迫切需要解决的问题。 与科技同行,培育网络素养 技术…...
ESP32 烧录问题
ESP32 烧录问题 1.无法连接 Connecting......................................A fatal error occurred: Failed to connect to ESP32: No serial data received.这个表示通过串口连接esp32失败,可能存在多种原因,比如串口选择错误。 所选串口不是连接…...
CnosDB 实时流式计算:优化时序数据处理与降采样解决方案
在处理时序数据时,数据写入周期通常与数据采集设备的频率相关,有时每秒钟就需要处理大量的数据点。长时间处理如此多的数据会导致存储问题。一个有效的解决方案是使用流式计算,将原始数据进行降采样。 流式计算在时序数据库中指对实时数据流…...
实测Llama3 8B在国产AI盒子上的推理速度:算丰SG2300x Airbox跑出9.6 token/s
实测Llama3 8B在国产AI盒子上的推理速度:算丰SG2300x Airbox跑出9.6 token/s 当Meta开源Llama3大模型的消息席卷AI社区时,一个更实际的问题浮出水面:如何让这个性能怪兽在边缘设备上真正跑起来?我们拿到搭载算丰SG2300x芯片的Radx…...
对比按量计费Taotoken的官方价折扣与活动价带来哪些实际节省
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按量计费:Taotoken的官方价折扣与活动价带来哪些实际节省 1. 理解Taotoken的计费模式 Taotoken作为大模型API的聚…...
告别Bash!在Ubuntu 22.04上打造你的终极开发终端:Terminator + ZSH + OhMyZsh保姆级配置
告别Bash!在Ubuntu 22.04上打造你的终极开发终端:Terminator ZSH OhMyZsh保姆级配置 如果你是一名长期使用Ubuntu进行开发的程序员,是否曾对默认的Bash终端感到效率瓶颈?每天重复输入冗长命令、频繁切换窗口、手动补全路径...这…...
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com/…...
【亲测免费】 探索U-Net多类别图像分割:基于PyTorch的开源利器
探索U-Net多类别图像分割:基于PyTorch的开源利器 【下载地址】U-Net多类别训练代码基于PyTorch 本仓库提供了一个基于PyTorch实现的U-Net模型代码,适用于多类别图像分割任务。你可以使用该代码训练自己的数据集,实现对图像中不同类别的精确分…...
5分钟极速上手:用Open-Lyrics让AI为你的音频自动生成专业字幕
5分钟极速上手:用Open-Lyrics让AI为你的音频自动生成专业字幕 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT,Claude等)来转录、翻译你的音频为字幕文件。…...
如何在Windows 11上搭建专业级Android开发环境:WSA完全指南
如何在Windows 11上搭建专业级Android开发环境:WSA完全指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for Android&…...
Google 的 IDE 演进小史
不知道你平时用的 IDE 是什么?小七的工程师同事有在用 Vim 的,也有 Emacs 党,IntelliJ 全家桶也有人在用,用得最多的可能是 VS Code。只要代码能写好、工具链能跑通,似乎大家没有必要使用同一个 IDE。 Google 早年也是…...
epub_to_audiobook开发者指南:如何扩展新的TTS提供商
epub_to_audiobook开发者指南:如何扩展新的TTS提供商 【免费下载链接】epub_to_audiobook EPUB to audiobook converter, optimized for Audiobookshelf, WebUI included 项目地址: https://gitcode.com/gh_mirrors/ep/epub_to_audiobook 想要为epub_to_audi…...
Linux用户的终极翻译助手:3种智能翻译方式完全指南
Linux用户的终极翻译助手:3种智能翻译方式完全指南 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation 你是否曾在Linux系统中阅读英文文档时频繁切换浏览器查词?是否因为图片…...
