【问题标题】:Leaflet custom icon marker rotate an angle, the transform style conflict传单自定义图标标记旋转一个角度,变换样式冲突
【发布时间】:2019-01-19 03:26:39
【问题描述】:

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

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

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

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的style属性为transform: translate3d,所以默认transform和我添加的transform style有冲突。而默认的变换样式是leaflet自己创建的,当我们缩放地图时,这个属性的值也会随之更新。

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

【问题讨论】:

标签: leaflet icons transform marker


【解决方案1】:

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

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

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");

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

【讨论】:

  • 谢谢。该插件易于使用。而且您的第二个解决方案也很容易理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2018-09-10
  • 2018-01-04
  • 2018-09-09
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多