Leaflet 点击传单上的脉动圈
我有一张单张地图。我使用圆作为标记,因为我有一些内置的缩放功能,我希望在缩放过程中圆的半径可以设置动画。不过,我也希望这些圆圈在被点击时会跳动。我在网上看到很多关于脉冲传单标记的文档,但是没有关于脉冲圆圈的文档。这里有一个简单的解决方案吗 jquery:Leaflet 点击传单上的脉动圈,leaflet,pulse,Leaflet,Pulse,我有一张单张地图。我使用圆作为标记,因为我有一些内置的缩放功能,我希望在缩放过程中圆的半径可以设置动画。不过,我也希望这些圆圈在被点击时会跳动。我在网上看到很多关于脉冲传单标记的文档,但是没有关于脉冲圆圈的文档。这里有一个简单的解决方案吗 jquery: var map = L.map('map').setView([40.449620, -79.939990], 13); L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/terra
var map = L.map('map').setView([40.449620, -79.939990], 13);
L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}{r}.{ext}', {
maxZoom: 19,
ext: 'png',
attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'//,
}).addTo(map);
map.on('click', function(e) {
var currentZoom = map.getZoom();
if (currentZoom == 13) {
map.flyTo(e.latlng, 15, { //zoom in on click
animate: true,
duration: 1,
easeLinearity: 1
});
}
});
$.post('php/get-buildings.php', function(output){
var obj = jQuery.parseJSON( output );
var color;
customCircle = L.Circle.extend({
options: {
//some more options here
}
});
for (var i=0; i<obj.length; i++) {
if (obj[i].there_2017 == 'No') {
color = '#000';
} else {
color = '#1565C0';
}
//var circle = L.circle([obj[i].lat,obj[i].lng], {
var circle = new customCircle([obj[i].lat,obj[i].lng], {
color: '#000',
weight: 0.5,
fillColor: color,
fillOpacity: 1,
borderWidth: 2,
radius: 40,
//some more properties
}).addTo(map).on("click", circleClick);
function circleClick(e) {
var clickedCircle = e.target;
clickedCircle.setStyle({'weight': '3'}); want to animate this
}
}//end for
});
有一个脉动圆标记的解决方案是使用css创建一个您喜欢的脉动标记 js代码:
const generatePulsatingMarker = function (radius, color) {
const cssStyle = `
width: ${radius}px;
height: ${radius}px;
background: ${color};
color: ${color};
box-shadow: 0 0 0 ${color};
`
return L.divIcon({
html: `<span style="${cssStyle}" class="pulse"/>`,
// empty class name to prevent the default leaflet-div-icon to apply
className: ''
})
}
const pulsatingIcon = generatePulsatingMarker(10, 'red');
L.marker([51.497, -0.09], {icon: pulsatingIcon}).addTo(map);
示例小提琴
另外,如果您希望标记仅在单击时才脉冲,则在单击事件时添加相应的脉冲css类。使用脉冲圆圈标记的解决方案是使用并创建您喜欢的脉冲标记 js代码:
const generatePulsatingMarker = function (radius, color) {
const cssStyle = `
width: ${radius}px;
height: ${radius}px;
background: ${color};
color: ${color};
box-shadow: 0 0 0 ${color};
`
return L.divIcon({
html: `<span style="${cssStyle}" class="pulse"/>`,
// empty class name to prevent the default leaflet-div-icon to apply
className: ''
})
}
const pulsatingIcon = generatePulsatingMarker(10, 'red');
L.marker([51.497, -0.09], {icon: pulsatingIcon}).addTo(map);
示例小提琴
另外,如果您希望标记仅在单击时脉冲,则在单击事件时添加相应的脉冲css类。Istopopoki:差不多了!脉动divIcon的背景是白色的,而不是透明的。你的小提琴不是那样的,但我看不出我做错了什么。函数marker单击{var clickedMarker=e.target;var pulsatingmacker=generatePulsatingMarker10,'f49934';L.marker[clickedMarker._latlng.lat,clickedMarker._latlng.lng],{icon:pulsatingIcon}.addTomap;}const generatePulsatingMarker=函数半径,颜色{const margin=0 const csssstyle=左边距:${marginpx;边距顶部:-${margin}px;宽度:${radius}px;高度:${radius}px;背景:${color};颜色:${color};框阴影:0 0${color};返回L.divIcon{html:,}我修复了它:在const声明中:返回L.divIcon{className:'dummy',html:Istopopoki:差不多了!脉动divIcon的背景是白色的,而不是透明的。在你的小提琴上不是这样,但我看不出我做错了什么。函数markerClicke{var clickedMarker=e.target;var pulsingicon=generatePulsatingMarker10,'f49934';L.marker[clickedMarker.\u latlng.lat,clickedMarker.\u latlng.lng],{icon:pultingicon}.addTomap;}const generatePulsatingMarker=函数半径,color{const margin=0 const csssstyle=左边距:-${margin}px;边距顶部:-${margin px}px;宽度:${radius}px;高度:${radius}px;背景:${color};color:${color};box shadow:0${color};return L.divIcon{html:,}}我修复了它:在const声明中:return L.divIcon{className:'dummy',html: