From eb6ae9f324dfdc43e0350c7fe3ca313c3e1ea482 Mon Sep 17 00:00:00 2001
From: HuangHai <10402852@qq.com>
Date: Tue, 9 Sep 2025 15:45:39 +0800
Subject: [PATCH] 'commit'
---
dsLightRag/XingJun/Arraw.svg | 4 -
dsLightRag/XingJun/blueArrow.png | Bin 6984 -> 0 bytes
dsLightRag/XingJun/move.html | 180 ++++++++++++++++++++-----------
dsLightRag/XingJun/红色箭头.png | Bin 5984 -> 0 bytes
4 files changed, 115 insertions(+), 69 deletions(-)
delete mode 100644 dsLightRag/XingJun/Arraw.svg
delete mode 100644 dsLightRag/XingJun/blueArrow.png
delete mode 100644 dsLightRag/XingJun/红色箭头.png
diff --git a/dsLightRag/XingJun/Arraw.svg b/dsLightRag/XingJun/Arraw.svg
deleted file mode 100644
index ec0e1578..00000000
--- a/dsLightRag/XingJun/Arraw.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/dsLightRag/XingJun/blueArrow.png b/dsLightRag/XingJun/blueArrow.png
deleted file mode 100644
index 5b277dec73b23903fe947d836be9278b516c85cf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6984
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 stopDistance) {
+ // 如果距离大于停止距离,计算新目标位置
+ const ratio = (distanceTotal - stopDistance) / distanceTotal;
+ adjustedTargetX = currentX + dxTotal * ratio;
+ adjustedTargetY = currentY + dyTotal * ratio;
+ } else {
+ // 如果已在停止距离内,保持当前位置
+ adjustedTargetX = currentX;
+ adjustedTargetY = currentY;
+ }
- // 动画帧函数
function updatePosition() {
- // 计算到目标的距离
- const dx = targetX - currentX;
- const dy = targetY - currentY;
+ const dx = adjustedTargetX - currentX;
+ const dy = adjustedTargetY - currentY;
const distance = Math.sqrt(dx * dx + dy * dy);
- // 如果距离小于5px,停止动画
- if (distance < 5) {
- // 确保箭头最终位置准确
- arrow.style.left = targetX + 'px';
- arrow.style.top = targetY + 'px';
+ // 当距离小于2px时停止动画(确保到达调整后的目标位置)
+ if (distance < 2) {
+ arrow.style.left = (adjustedTargetX - centerOffsetX) + 'px';
+ arrow.style.top = (adjustedTargetY - centerOffsetY) + 'px';
return;
}
- // 计算移动步长(距离的5%,确保靠近目标时减速)
- const step = distance * 0.05;
+ const step = Math.max(distance * 0.05, 1);
const moveX = (dx / distance) * step;
const moveY = (dy / distance) * step;
- // 更新位置
currentX += moveX;
currentY += moveY;
- arrow.style.left = currentX + 'px';
- arrow.style.top = currentY + 'px';
+ arrow.style.left = (currentX - centerOffsetX) + 'px';
+ arrow.style.top = (currentY - centerOffsetY) + 'px';
- // 继续动画
requestAnimationFrame(updatePosition);
}
- // 开始动画
updatePosition();
}
// 加载保存的元素
@@ -191,13 +223,13 @@
const container = document.createElement('div');
container.className = 'arrow-container';
container.dataset.imagePath = imagePath;
-
+
const newImage = document.createElement('div');
newImage.className = 'arrow-image';
newImage.style.backgroundImage = `url('${imagePath}')`;
-
+
container.appendChild(newImage);
-
+
// 添加文字元素
if (textContent) {
const textElement = document.createElement('div');
@@ -206,16 +238,23 @@
container.dataset.text = textContent;
container.appendChild(textElement);
}
-
- // 设置位置
+
+ // 设置位置 - 使用中心点作为参照
+ const arrowWidth = 155;
+ const arrowHeight = 173;
+ const centerOffsetX = arrowWidth / 2;
+ const centerOffsetY = arrowHeight / 2;
+
if (position) {
- container.style.left = position.left;
- container.style.top = position.top;
+ // 修复:直接使用传递的左上角位置,不再减去偏移量
+ container.style.left = parseFloat(position.left) + 'px';
+ container.style.top = parseFloat(position.top) + 'px';
} else {
- const x = Math.random() * (backgroundContainer.offsetWidth - 155);
- const y = Math.random() * (backgroundContainer.offsetHeight - 173);
- container.style.left = `${x}px`;
- container.style.top = `${y}px`;
+ // 随机位置也使用中心点作为参照
+ const x = Math.random() * (backgroundContainer.offsetWidth - arrowWidth) + centerOffsetX;
+ const y = Math.random() * (backgroundContainer.offsetHeight - arrowHeight) + centerOffsetY;
+ container.style.left = (x - centerOffsetX) + 'px';
+ container.style.top = (y - centerOffsetY) + 'px';
}
// 双击编辑文字
@@ -286,16 +325,27 @@
// 保存/加载功能
function saveAllElements() {
const elements = [];
- document.querySelectorAll('.arrow-container').forEach(container => {
+ const arrowWidth = 155;
+ const arrowHeight = 173;
+ const centerOffsetX = arrowWidth / 2;
+ const centerOffsetY = arrowHeight / 2;
+
+ document.querySelectorAll('.arrow-container').forEach(arrow => {
+ // 保存中心点坐标而非左上角坐标
+ const left = parseFloat(arrow.style.left) || 0;
+ const top = parseFloat(arrow.style.top) || 0;
+
elements.push({
type: 'arrow',
- imagePath: container.dataset.imagePath,
- text: container.dataset.text || '',
- left: container.style.left,
- top: container.style.top
+ imagePath: arrow.dataset.imagePath,
+ // 计算并保存中心点位置
+ left: left + centerOffsetX,
+ top: top + centerOffsetY,
+ text: arrow.dataset.text || ''
});
});
- // 新增:保存中心点数据
+
+ // 保存中心点
if (centerDot) {
elements.push({
type: 'center',
@@ -303,34 +353,34 @@
top: centerDot.style.top
});
}
- localStorage.setItem('mapElements', JSON.stringify(elements));
- alert('保存成功!');
+
+ localStorage.setItem('savedElements', JSON.stringify(elements));
+ alert('位置已保存');
}
function loadAllElements() {
- const savedData = localStorage.getItem('mapElements');
- if (savedData) {
- try {
- JSON.parse(savedData).forEach(element => {
- if (element.type === 'arrow') {
- addImageToContainer(element.imagePath, {left: element.left, top: element.top}, element.text);
- }
- // 新增:处理中心点数据
- else if (element.type === 'center') {
- // 如果已有中心点,先移除
- if (centerDot) {
- centerDot.remove();
- }
- // 创建新的中心点
- centerDot = document.createElement('div');
- centerDot.className = 'center-dot';
- centerDot.style.left = element.left;
- centerDot.style.top = element.top;
- backgroundContainer.appendChild(centerDot);
- }
- });
- } catch (e) { console.error('加载失败:', e); }
- }
+ const savedElements = JSON.parse(localStorage.getItem('savedElements') || '[]');
+ const arrowWidth = 155;
+ const arrowHeight = 173;
+ const centerOffsetX = arrowWidth / 2;
+ const centerOffsetY = arrowHeight / 2;
+
+ savedElements.forEach(item => {
+ if (item.type === 'arrow') {
+ // 加载时使用中心点坐标减去偏移量得到左上角位置
+ addImageToContainer(item.imagePath, {
+ left: item.left - centerOffsetX,
+ top: item.top - centerOffsetY
+ }, item.text);
+ } else if (item.type === 'center') {
+ // 创建中心点
+ centerDot = document.createElement('div');
+ centerDot.className = 'center-dot';
+ centerDot.style.left = item.left;
+ centerDot.style.top = item.top;
+ backgroundContainer.appendChild(centerDot);
+ }
+ });
}
}); // DOMContentLoaded回调结束
// 确保这里没有残留的startAnimation函数定义
diff --git a/dsLightRag/XingJun/红色箭头.png b/dsLightRag/XingJun/红色箭头.png
deleted file mode 100644
index d9aa76e1b98313951b0dd5d24b8a3dd465f1a559..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5984
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