gpt4 book ai didi

javascript - 如何为 L.Tooltip 显示设置延迟?

转载 作者:行者123 更新时间:2023-11-29 23:23:59 28 4
gpt4 key购买 nike

我想知道如何在鼠标悬停时为工具提示可视化设置延迟。我在文档的选项描述中没有找到这样的功能。

我的 map 上挤满了很多标记,所以当鼠标四处移动时,总是会出现一些工具提示。我的想法是设置一些延迟,例如在悬停 1 秒后,显示该特定标记的工具提示。

谢谢!

最佳答案

我还需要延迟功能,所以我从旧的 Tooltip 插件中获取它并做了一个快速的解决方法,它可能会做得更好,但我没有时间改进它。

我扩展了 bindtooltip、open 和 close 方法,并将“showDelay”和“hideDelay”属性添加到 L.Layer 类。我也在“initTooltipInteractions”处添加了一个点击事件来关闭工具提示,因为它在我的特定情况下有意义,但您可以将其关闭。

只需将其添加到 javascript 文件并在 leaflet 之后加载它:

 L.Layer.include({

showDelay: 1200,
hideDelay: 100,

bindTooltipDelayed: function (content, options) {

if (content instanceof L.Tooltip) {
L.setOptions(content, options);
this._tooltip = content;
content._source = this;
} else {
if (!this._tooltip || options) {
this._tooltip = new L.Tooltip(options, this);
}
this._tooltip.setContent(content);

}

this._initTooltipInteractionsDelayed();

if (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {
this.openTooltipWithDelay();
}

return this;
},

_openTooltipDelayed: function (e) {
var layer = e.layer || e.target;

if (!this._tooltip || !this._map) {
return;
}
this.openTooltipWithDelay(layer, this._tooltip.options.sticky ? e.latlng : undefined);
},

openTooltipDelayed: function (layer, latlng) {
if (!(layer instanceof L.Layer)) {
latlng = layer;
layer = this;
}
if (layer instanceof L.FeatureGroup) {
for (var id in this._layers) {
layer = this._layers[id];
break;
}
}
if (!latlng) {
latlng = layer.getCenter ? layer.getCenter() : layer.getLatLng();
}
if (this._tooltip && this._map) {
this._tooltip._source = layer;
this._tooltip.update();
this._map.openTooltip(this._tooltip, latlng);
if (this._tooltip.options.interactive && this._tooltip._container) {
addClass(this._tooltip._container, 'leaflet-clickable');
this.addInteractiveTarget(this._tooltip._container);
}
}

layer.fireEvent('mousemove', lastMouseEvent);

return this;
},
openTooltipWithDelay: function (t, i) {
this._delay(this.openTooltipDelayed, this, this.showDelay, t, i);
},
closeTooltipDelayed: function () {
if (this._tooltip) {
this._tooltip._close();
if (this._tooltip.options.interactive && this._tooltip._container) {
removeClass(this._tooltip._container, 'leaflet-clickable');
this.removeInteractiveTarget(this._tooltip._container);
}
}
return this;
},
closeTooltipWithDelay: function () {
clearTimeout(this._timeout);
this._delay(this.closeTooltipDelayed, this, this.hideDelay);
},
_delay: function (func, scope, delay, t, i) {
var me = this;
if (this._timeout) {
clearTimeout(this._timeout)
}
this._timeout = setTimeout(function () {
func.call(scope, t, i);
delete me._timeout
}, delay)
},
_initTooltipInteractionsDelayed: function (remove$$1) {
if (!remove$$1 && this._tooltipHandlersAdded) { return; }
var onOff = remove$$1 ? 'off' : 'on',
events = {
remove: this.closeTooltipWithDelay,
move: this._moveTooltip
};
if (!this._tooltip.options.permanent) {
events.mouseover = this._openTooltipDelayed;
events.mouseout = this.closeTooltipWithDelay;
events.click = this.closeTooltipWithDelay;
if (this._tooltip.options.sticky) {
events.mousemove = this._moveTooltip;
}
if (L.touch) {
events.click = this._openTooltipDelayed;
}
} else {
events.add = this._openTooltipDelayed;
}
this[onOff](events);
this._tooltipHandlersAdded = !remove$$1;
}
});

然后使用它:

layer.showDelay = 800; //use 0 for no delay behavior
layer.hideDelay = 2000; //use 0 for normal behavior
layer.bindTooltipDelayed("text", tooltipOptions);

关于javascript - 如何为 L.Tooltip 显示设置延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49833475/

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