deepseek
高亮的滑块无法取消选中状态
(function finalFix() {
console.log(‘[最终修复] 开始修复 Ctrl+点击地图图片多选功能…’);
// ========== 1. 修复 clearAllSelections 函数 ==========
const originalClearAll = window.clearAllSelections;
window.clearAllSelections = function() {
// 保存当前选中的栅格图片和相关滑块元素
const savedRasters = multiSelectedElements.filter(el => el.type === 'raster');
// 调用原始函数清除所有选中
originalClearAll();
// 恢复栅格图片的选中状态到 multiSelectedElements
savedRasters.forEach(raster => {
if (!multiSelectedElements.some(el => el.type === 'raster' && el.item.id === raster.item.id)) {
multiSelectedElements.push(raster);
}
// 恢复滑块高亮
if (raster.item.rangeEl) {
raster.item.rangeEl.classList.add('selected');
}
});
// 恢复 selectedRasterImage(如果有)
if (savedRasters.length > 0) {
selectedRasterImage = savedRasters[savedRasters.length - 1].item;
}
console.log('[修复] 已恢复栅格图片选中:', savedRasters.map(r => r.item.name));
};
// ========== 2. 修复 selectRasterImageViaTimeline 函数 ==========
const originalSelectRasterViaTimeline = window.selectRasterImageViaTimeline;
window.selectRasterImageViaTimeline = function(rasterImage) {
if (!rasterImage) return;
// 检查是否处于多选状态
const selectedRasterCount = multiSelectedElements.filter(el => el.type === 'raster').length;
const isMultiSelectActive = selectedRasterCount > 0 &&
!(selectedRasterCount === 1 && multiSelectedElements.some(el => el.type === 'raster' && el.item.id === rasterImage.id));
if (isMultiSelectActive) {
console.log('[修复] 多选模式下保持选中,只更新 current');
selectedRasterImage = rasterImage;
if (rasterImage.rangeEl) {
rasterImage.rangeEl.classList.add('selected');
}
document.getElementById("propertyPanel").classList.add("open");
document.getElementById("modelProperties").style.display = "block";
if (typeof populateRasterImagePanel === 'function') {
populateRasterImagePanel(rasterImage);
}
return;
}
originalSelectRasterViaTimeline(rasterImage);
};
// ========== 3. 修改 removeFromMultiSelection 函数 ==========
const originalRemoveFromMulti = window.removeFromMultiSelection;
if (originalRemoveFromMulti) {
window.removeFromMultiSelection = function(item, type) {
if (type === 'raster') {
const toRemove = item;
originalRemoveFromMulti(toRemove, type);
if (toRemove.rangeEl) {
toRemove.rangeEl.classList.remove('selected');
}
const remainingRasters = multiSelectedElements.filter(el => el.type === 'raster');
if (remainingRasters.length === 0) {
selectedRasterImage = null;
if (rasterDraw) {
rasterDraw.changeMode('simple_select', { featureIds: [] });
}
if (typeof hideRotationControl === 'function') hideRotationControl();
if (typeof removeRasterDragMarker === 'function') removeRasterDragMarker();
} else if (selectedRasterImage === toRemove) {
selectedRasterImage = remainingRasters[remainingRasters.length - 1].item;
}
console.log('[修复] 移除栅格图片选中:', toRemove.name, '剩余:', remainingRasters.length);
return;
}
originalRemoveFromMulti(item, type);
};
}
// ========== 4. 修改 addToMultiSelection 函数 ==========
const originalAddToMulti = window.addToMultiSelection;
if (originalAddToMulti) {
window.addToMultiSelection = function(item, type) {
if (type === 'raster') {
if (multiSelectedElements.some(el => el.type === 'raster' && el.item.id === item.id)) {
return;
}
originalAddToMulti(item, type);
if (item.rangeEl) {
item.rangeEl.classList.add('selected');
}
console.log('[修复] 添加栅格图片选中:', item.name);
return;
}
originalAddToMulti(item, type);
};
}
// ========== 5. 修改 selectRasterImage 函数 ==========
const originalSelectRaster = window.selectRasterImage;
if (originalSelectRaster) {
window.selectRasterImage = function(rasterImage) {
if (!rasterImage) return;
const isMultiSelectActive = multiSelectedElements.some(el =>
el.type === 'raster' && el.item.id !== rasterImage.id
);
if (isMultiSelectActive) {
selectedRasterImage = rasterImage;
if (rasterImage.rangeEl) {
rasterImage.rangeEl.classList.add('selected');
}
document.getElementById("propertyPanel").classList.add("open");
if (typeof populateRasterImagePanel === 'function') {
populateRasterImagePanel(rasterImage);
}
return;
}
originalSelectRaster(rasterImage);
};
}
// ========== 6. 替换地图点击事件中的栅格图片处理逻辑 ==========
// 找到地图的 click 事件监听器并增强
if (map && map._events && map._events.click) {
console.log('[修复] 增强地图点击事件中的栅格图片处理');
}
console.log('[最终修复] 完成!现在可以通过 Ctrl+点击 地图上的图片进行多选了');})();
意见反馈
