frontend 相关问题

面向用户的应用程序部分。在桌面应用程序中,这将包括窗口框架和用户与之交互的表单;在命令行程序中,它将是可用的命令和参数;在Web应用程序中,它将引用HTML和JavaScript。

React:为 Web 和移动版本创建单独的文件

我正在学习前端,我有一个问题。我正在开展一个团队项目,由于分歧,我有一个问题这是这个团队中唯一的 FE,所以我无处可问。 队长保持

回答 1 投票 0

React 项目未部署在 vercel 上,但可以在本地主机上运行

当我尝试部署我的React聊天项目时,该项目不基于后端,并且不会陷入Web套接字的复杂性,并且仅使用来自另一个js文件的虚拟数据,app.j的代码...

回答 1 投票 0

添加文本元素的辅助功能

我正在努力为网站添加可访问性。 现在我知道 aria-labels、aria-labelledby 等旨在为交互类型的元素提供可访问的名称,正如本节中明确提到的......

回答 1 投票 0

将类名放在 React-Icon 上

我一直在尝试将一个类直接放置在图标上,以便我可以操纵它的阴影。但是,{card.c_icon && } 或 {createElemen...

回答 1 投票 0

CSS计算高度和宽度混合使用

我有一个 div 元素(带有背景图像),我想占据父元素宽度的 40% 或父元素高度的 100% 中较小的一个。 这可以通过 CSS calc() 实现吗?还是我不需要...

回答 1 投票 0

这个挑战涉及状态或道具或 React 中的任何名称

从“react”导入React 导出默认函数 App() { const [消息,setMessages] = React.useState([]) 函数混乱计数(){ setMessages(prevMessage => prevMessage.

回答 1 投票 0

验证表单中是否至少填写了一个字段(复选框或其他文本字段),如果两者都为空,则在 Angular 中显示错误?

要验证表单中是否至少填写了一个字段(复选框或“otherText”字段),请为表单组创建一个自定义验证器。该验证器将检查是否在...

回答 1 投票 0

在 Symfony 前端应用程序中利用 Doctrine 关系

让我们考虑以下简单的模式(在 Doctrine 中,但也欢迎 Propel 用户): 用户: 列: 名称:字符串 文章: 列: 用户 ID:整数 内容:字符串 关系...

回答 1 投票 0

部署后无法从后端服务器获取数据

我使用 vite + React 创建了前端,使用 Node.js + Express 和 mongoDB 创建了后端。我的后端和前端都是使用 Render 托管的。银行端工作正常,因为我能够看到 json obj...

回答 1 投票 0

如何在Next.js 14.1中使用SSR获取数据?

我正在尝试将数据获取到 SSR 中的仪表板组件,但未定义 有什么解决方案可以正确获取数据吗? 这是我的仪表板组件的代码: 从“./

回答 2 投票 0

onClick 事件上总是得到错误的值

我创建一个表格来显示一些值 {列表版本 ? listVersions.map(( 我创建一个表格来显示一些值 <TableContainer> <Table sx={{ width: "100%" }}> {listVersions ? listVersions.map((current_version, index) => { const isItemSelected = isSelected(index+ 1); const labelId = `enhanced-table-checkbox-${index}`; return ( <TableRow hover onClick={() => handleClick(index + 1, current_version, isItemSelected)} role="checkbox" aria-checked={isItemSelected} tabIndex={-1} key={index + 1} selected={isItemSelected} sx={{ cursor: "pointer" }} > <TableCell padding="checkbox"> <Checkbox color="primary" checked={isItemSelected} inputProps={{ "aria-labelledby": labelId, }} /> </TableCell> <TableCell>{current_version}</TableCell> </TableRow> 我需要选择当前版本。 所以handleClick看起来像: const handleClick = (id: number, version: string, isSelected: boolean) => { console.log(version , isSelected); ...... } 正确的版本显示在控制台中,但其状态,无论是否选中,始终是相反的值。当我选择行时,值为 false,当我取消选择行时,值为 true。 选择行时预期值为 true。 我不明白哪里出了问题 handleClick函数,isSelected似乎是负责判断该行是否被选中的函数。您可以直接将选定的状态传递给 handleClick 函数,而不是依赖于 isSelected 函数。 <TableRow hover onClick={() => handleClick(index + 1, current_version, isItemSelected)} role="checkbox" aria-checked={isItemSelected} tabIndex={-1} key={index + 1} selected={isItemSelected} sx={{ cursor: "pointer" }} > 修改您的 handleClick 函数以直接使用从 TableRow 组件传递的 isItemSelected 值 const handleClick = (id: number, version: string, isItemSelected: boolean) => { console.log(version, isItemSelected); // Other logic };

回答 1 投票 0

如何在MUI-X DataGrid中实现静态行号?

我需要渲染表格中每一行的编号。它应该是静态的,并且在对表中的列进行排序或过滤时不应更改。 我尝试使用 getRowIndexRelativeToVisibleRows m...

回答 1 投票 0

Angular 17 主体行为

在 Angular 17 中,我在登录服务中设置了一个可观察对象。但是,当尝试在 app.component.ts 中使用此可观察量时,它最初不会被调用。重新加载页面后

回答 1 投票 0

vue中element-plus使用中ElButton和el-button有什么不同

element-plus官方文档中,组件的导入方式是:ElButton,使用方式是:el-button。 在我的实践中,是这样使用element-plus的:ElButton也能正常工作。 我徘徊...

回答 1 投票 0

使用自定义 Bootstrap Angular

我有一个关于 Angular 的问题无法解决。我使用 Mustache 和 Bootstrap 创建了一个 Spring Web。现在我想用Angular来做前端,但我无法实现它。 这是

回答 1 投票 0

如何使用外部方法向 JTable 添加行

我正在为数字走廊设置模式,以便管理员可以访问学生姓名和学生 ID。我的代码应该有一个包含学生姓名和 ID 的 JTable,当您按“添加行”但是...

回答 1 投票 0

无法更新useEffect()中的useState()常量

`const [详细信息,setDetails] = useState({ “id”:0, “创建”:“”, “标题”: ””, "general_category": "", “特定类别&...

回答 1 投票 0

Angular 生命周期钩子?

只是想知道如果我没有显式实现任何生命周期钩子,Angular 框架会隐式调用它吗? 例如:如果我没有在组件中使用@input,ngOnChanges将被触发

回答 1 投票 0

使用javascript将上传的文件分割成多个块

我正在寻找一种方法来在浏览器前端拆分任何文本/数据文件,然后再将其作为多个文件上传。我的限制是每次上传 40KB。因此,如果用户上传 400KB 的文件,则会

回答 2 投票 0

无法移动到图像的左侧或顶部

我对 css、html 还很陌生。目前我遇到了一个问题,放大时无法到达顶部或左侧,缩小时看起来从未发生过这种情况 !DOCTYPE html> 我对 css、html 还很陌生。目前我遇到了一个问题,放大时无法到达顶部或左侧,缩小时看起来从未发生过这种情况 !DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SVG Viewer</title> <style> body, html { margin: 0; padding: 0; height: 100%; } #container { display: flex; height: 100%; overflow: hidden; /* Agregado para ocultar el desbordamiento de los botones */ } #svg-container { flex: 1; overflow: auto; padding: 10px; } svg { max-width: 100%; max-height: 100%; display: block; } .zoom-btn { padding: 10px; background-color: #f0f0f0; border: 1px solid #ccc; cursor: pointer; z-index: 1; /* Asegura que los botones estén por encima del SVG */ } </style> </head> <body> <div id="container"> <div id="svg-container"> <svg id="my-svg" version="1.0" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1049 744" preserveAspectRatio="xMidYMid meet"> <g transform="translate(0,744) scale(0.1,-0.1)" fill="#000000" stroke="none"> <path d="M8699 7344 c-10 -11 -42 -61 -73 -112 -613 -1016 -1784 -2032 -3386 -2939 -269 -152 -537 -294 -650 -343 -352 -155 -1199 -468 -2245 -832 -443 -154 -920 -317 -947 -323 -14 -4 -33 -14 -41 -23 -14 -15 -1280 -2382 -1293 -2417 -3 -8 5 -25 18 -38 23 -23 29 -24 194 -26 170 -1 1458 -25 1954 -36 146 -3 732 -15 1303 -25 2689 -51 3130 -60 3382 -65 149 -3 614 -12 1035 -20 913 -17 1199 -23 1800 -35 250 -6 503 -10 562 -10 105 0 108 1 125 26 19 29 46 -199 -272 2284 -30 239 -125 982 -211 1650 -85 668 -164 1278 -174 1355 l-18 140 143 795 c79 437 149 824 155 859 11 59 10 65 -10 86 -25 27 -73 31 -455 40 -126 3 -288 7 -360 10 -503 18 -519 18 -536 -1z m696 -110 c303 -9 552 -18 554 -20 1 -1 -61 -355 -139 -786 -79 -431 -145 -810 -147 -843 -3 -38 16 -217 51 -490 52 -406 113 -878 226 -1765 27 -212 81 -635 120 -940 39 -305 118 -919 175 -1365 57 -445 101 -812 99 -814 -4 -4 -1699 24 -2044 34 -91 3 -304 7 -475 10 -414 7 -1257 23 -1585 30 -146 3 -618 12 -1050 20 -741 14 -954 18 -1555 31 -137 2 -961 18 -1830 35 -868 16 -1581 32 -1583 34 -2 2 5 19 16 37 11 18 277 517 592 1108 315 591 583 1091 595 1111 13 20 35 39 49 43 123 31 1895 655 2451 864 559 209 756 294 1053 453 1750 938 3074 2047 3732 3127 l63 102 41 0 c22 0 289 -7 591 -16z"/> <path id="destino" d="M9470 7005 l0 -165 150 0 150 0 0 165 0 165 -150 0 -150 0 0 -165z m250 0 l0 -115 -100 0 -100 0 0 115 0 115 100 0 100 0 0 -115z"/> <g id="punto-destino"> <circle cx="9470" cy="7005" r="100" fill="red" /> </g> <path id="camino_abajo" d="M9305 6478 c-3 -7 -25 -1225 -50 -2707 -24 -1482 -46 -2696 -48 -2698 -2 -2 -1731 31 -3841 72 -2111 41 -3842 73 -3847 70 -12 -8 -12 -32 0 -39 5 -3 1736 -40 3846 -81 2111 -41 3848 -78 3860 -81 13 -3 25 -1 29 4 8 13 98 5451 91 5463 -9 13 -35 11 -40 -3z"/> <path id="camino_arriba" d="M8845 6458 c-3 -7 -43 -1088 -90 -2402 -46 -1313 -86 -2390 -88 -2392 -1 -2 -1594 28 -3538 66 -1943 38 -3544 70 -3557 70 -24 0 -41 -25 -26 -40 11 -11 7160 -154 7176 -144 5 3 7 16 4 27 -3 11 33 1097 80 2411 46 1315 82 2397 79 2404 -2 6 -11 12 -20 12 -9 0 -18 -6 -20 -12z"/> <path id="entrada" d="M710 870 l0 -120 310 0 310 0 0 120 0 120 -310 0 -310 0 0 -120z m570 0 l0 -70 -260 0 -260 0 0 70 0 70 260 0 260 0 0 -70z"/> <g id="punto-entrada"> <circle cx="710" cy="870" r="100" fill="red" /> </g> <polyline id="ruta" fill="none" stroke="red" stroke-width="2"/> </g> </svg> </div> <div id="nav"> <button class="zoom-btn" id="zoom-in">+</button> <button class="zoom-btn" id="zoom-out">-</button> </div> </div> <script> var zoomInBtn = document.getElementById('zoom-in'); var zoomOutBtn = document.getElementById('zoom-out'); var puntoEntrada = document.getElementById('punto-entrada'); var puntoDestino = document.getElementById('punto-destino'); var ruta = document.getElementById('ruta'); var svg = document.getElementById('my-svg'); var scale = 1; zoomInBtn.addEventListener('click', function() { scale *= 1.2; updateView(); }); zoomOutBtn.addEventListener('click', function() { scale *= 0.8; updateView(); }); function updateView() { svg.style.transform = 'scale(' + scale + ')'; } // Calcular la ruta desde la entrada hasta el destino function calcularRuta() { debugger; // Obtener coordenadas de los puntos de entrada y destino var entradaX = puntoEntrada.getAttributeNS(null, 'cx'); var entradaY = puntoEntrada.getAttribute('cy'); var destinoX = puntoDestino.getAttribute('cx'); var destinoY = puntoDestino.getAttribute('cy'); // Establecer las coordenadas de los puntos de la ruta ruta.setAttribute('x1', entradaX); ruta.setAttribute('y1', entradaY); ruta.setAttribute('x2', destinoX); ruta.setAttribute('y2', destinoY); } // Calcular la ruta al cargar la página window.onload = function() { calcularRuta(); }; </script> </body> </html> 我已经尝试编辑一些属性,但不起作用。我不太确定为什么会发生这种情况,并且非常感谢任何帮助。抱歉英语不好。 为了解决这个问题,您需要在放大或缩小时动态调整 SVG 内容在其容器内的缩放和位置。目前,您仅对 SVG 元素本身应用缩放变换,但您还需要调整容器的滚动位置以保持缩放内容可见。 以下是如何更改 updateView() 函数来实现此目的: function updateView() { svg.style.transform = 'scale(' + scale + ')'; // Adjust container scroll position var rect = svg.getBoundingClientRect(); var scrollLeft = (rect.width * scale - rect.width) / 2; var scrollTop = (rect.height * scale - rect.height) / 2; svg.parentElement.scrollLeft = scrollLeft; svg.parentElement.scrollTop = scrollTop; } 此代码计算容器需要水平和垂直滚动的量,以保持缩放的内容居中且可见,然后相应地调整容器的scrollLeft和scrollTop。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.