我正在尝试更改React-LeafletTileLayer..。基本上,我想做的是通过调整 .leaflet-tile 类上的过滤器样式属性,在不调暗/改变标记的情况下调暗平铺层使用按钮或滑块。
我在这里有一个代码沙盒设置,其中包含我迄今为止尝试过的内容。
我首先将MapContainer组件包装在一个div中,并使用useRef hook,如下所示:
const tileRef = useRef(null);
A pretty CSS3 popup.
Easily customizable.
然后,我设置了一个监视brightnessLevel状态钩子的useEffect。在useEffect内部,我使用tileRef来访问.leaflet-tile css类的style.filter属性。它正在访问它,并在console.log中显示它,但在显示中没有任何变化:
const [brightLevel, setBrightLevel] = useState(100);
useEffect(() => {
if (tileRef.current) {
if (tileRef.current.querySelector(".leaflet-tile")) {
if (tileRef.current.querySelector(".leaflet-tile").style) {
console.log(tileRef.current.querySelector(".leaflet-tile").style);
if (
tileRef.current.querySelector(".leaflet-tile").style.filter ||
tileRef.current.querySelector(".leaflet-tile").style.filter === ""
) {
console.log("Check Four pass");
console.log(tileRef.current.querySelector(".leaflet-tile").style.filter);
tileRef.current.querySelector(".leaflet-tile").style.filter = `brightness(${parseInt(brightLevel)}%)`;
}
}
}
} else {
console.log("No Ref");
}
}, [brightLevel]);
我真的不确定为什么我可以访问该属性,并让它像正在更新一样进行console.log,但显示中没有任何变化。有什么想法吗?
版本:
发布于 2021-02-25 09:07:42
你应该分配tileRef
至TileLayer
而不是父级MapContainer'sdiv
..。使用tileRef's .getContainer().style.setProperty
若要同时更改css属性和效果,请执行以下操作。
const tileRef = useRef();
const [map, setMap] = useState(null);
const [filter, setFilter] = useState(100);
useEffect(() => {
if (map) {
tileRef.current
.getContainer()
.style.setProperty("filter", `brightness(${filter}%)`);
}
}, [map, filter]);
<>
Change filter property
setFilter(e.target.value)}
value={filter}
/>
https://stackoverflow.com/questions/66355741
复制相似问题