gpt4 book ai didi

Leaflet自定义图标标记旋转角度,transform风格冲突

转载 作者:行者123 更新时间:2023-12-03 23:13:59 32 4
gpt4 key购买 nike

我用以下演示重现了这个问题:http://jsfiddle.net/baoqger/deL0yuvg/9/

在我的项目中,我有一个自定义图标标记,我想在某些情况下旋转图标。

我在创建图标时添加了一个 claasname:

const uturnIcon = L.icon({
iconUrl: 'http://joshuafrazier.info/images/firefox.svg',
iconSize: [30, 30],
className: 'u-turn-icon'
})

并为该类添加 css 样式,如下所示:
.u-turn-icon {
transform: rotate(20deg) !important
}

问题出在默认情况下,图标img的样式属性为 transform: translate3d ,所以默认转换和我添加的转换样式之间存在冲突。并且默认的变换样式是由传单本身创建的,当我们缩放 map 时,该属性的值也会更新。

那么如何解决这个问题呢?

最佳答案

您的代码的第一个问题是它围绕它的角落而不是它的中心旋转图标,因此它最终会出现在错误的位置。第二个问题是Leaflet使用了图标的style.transform属性来定位它,所以每次 map 缩放时旋转都会被覆盖。

Leaflet.RotatedMarker @IvanSanchez 建议的插件看起来是一个优雅的解决方案。如果您无法使用该插件,以下可能对您有用:

CSS样式:

.u-turn-icon {
transform-origin: center;
}

Javascript:

map.on("zoomstart", function(ev) {
let icons = document.getElementsByClassName("u-turn-icon");
for(let icon of icons) {
icon.style.visibility = "hidden";
}
});

map.on("zoomend", function(ev){
let icons = document.getElementsByClassName("u-turn-icon");
for(let icon of icons) {
icon.style.transform += " rotate(20deg)";
icon.style.visibility = "";
}
});

map.fire("zoomend");

此代码只是在每次缩放 map 时重置每个 U 形转弯图标的旋转。该图标在缩放开始时隐藏并在结束时显示,因此您不会注意到它在旋转。一个 zoomend在 map 缩放之前手动触发事件以将图标设置为正确的旋转。

关于Leaflet自定义图标标记旋转角度,transform风格冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54263825/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com