在 Javascript 中编写此点击事件/函数是否有更简单(更短)的符号?
Is there a simpler (shorter) notation for writing this click event / function(s) in Javascript?
我正在制作 Leaflet 地图,地图上有 37 个标记。有没有更短的方法来编写下面的代码,或者我是否必须像下面使用前 2 个标记那样编写 37 次点击事件?
const marker1 = L.marker([45.899491, 16.844165],{icon:leafletIcon}).addTo(bjelovar);
const marker2 = L.marker([45.896034, 16.845399],{icon:leafletIcon}).addTo(bjelovar);
marker1.on('click',function(){
const content1 = '<div class="modal-text">Ulica je nosila naziv po Josipu Blivajsu do početka 1930-tih godina kada postaje Ulica Frana Supila. Vodi od središnjeg Trga Eugena Kvaternika do Šetališta dr. Ivše Lebovića odnosno Dječjeg odjela knjižnice. Neke od najznačajnijih građevina svakako su njezine uglovnice: nekadašnje svratište Zvijezda te kuća Ivana Ružića uz trg, zgrada Prve hrvatske štedionice, zgrada Kraljevskog poštanskog i brzojavnog ureda te gostiona J. Svobode na kraju ulice.</div> <img class="modal-img" src="./images/full/Blivajsova/01 Blivajsova ulica (oko 1900).jpg"> <img class="modal-img" src="./images/full/Blivajsova/02 Blivajsova ulica (oko 1902).jpg"> <img class="modal-img" src="./images/full/Blivajsova/03 Blivajsova ulica (oko 1907).jpg">';
L.control.window(bjelovar,{
title: 'Blivajsova ulica'
})
.content(content1)
.show()
});
marker2.on('click',function(){
const content2 = '<div class="modal-text">Prethodno ulica Teodora Georgijevića, dobila je ime Tomaša Masaryka početkom 1930-tih godina. Formirana je širenjem grada u jugoistočnom pravcu, uvjetovanim dolaskom željeznice. Zamišljena je kao reprezentativan pojas historicističkih i secesijskih stambenih vila s kovanim ogradama i zelenilom prema ulici.</div> <img class="modal-img" src="./images/full/Cetvrt/01 Četvrt vila (oko 1909).jpg"> <img class="modal-img" src="./images/full/Cetvrt/02 Četvrt vila (oko 1912).jpg"> <img class="modal-img" src="./images/full/Cetvrt/03 Četvrt vila (oko 1914).jpg">';
L.control.window(bjelovar,{
title: 'Četvrt vila'
})
.content(content2)
.show()
});
您可以将标记添加到特征组,然后读出标记并在循环中添加侦听器。
const group = L.featureGroup().addTo(bjelovar);
const marker1 = L.marker([45.899491, 16.844165],{icon:leafletIcon}).addTo(group);
const marker2 = L.marker([45.896034, 16.845399],{icon:leafletIcon}).addTo(group);
group.eachLayer((layer)=>{
layer.on('click',function(){
const content1 = '<div class="modal-text">Ulica je nosila naziv po Josipu Blivajsu do početka 1930-tih godina kada postaje Ulica Frana Supila. Vodi od središnjeg Trga Eugena Kvaternika do Šetališta dr. Ivše Lebovića odnosno Dječjeg odjela knjižnice. Neke od najznačajnijih građevina svakako su njezine uglovnice: nekadašnje svratište Zvijezda te kuća Ivana Ružića uz trg, zgrada Prve hrvatske štedionice, zgrada Kraljevskog poštanskog i brzojavnog ureda te gostiona J. Svobode na kraju ulice.</div> <img class="modal-img" src="./images/full/Blivajsova/01 Blivajsova ulica (oko 1900).jpg"> <img class="modal-img" src="./images/full/Blivajsova/02 Blivajsova ulica (oko 1902).jpg"> <img class="modal-img" src="./images/full/Blivajsova/03 Blivajsova ulica (oko 1907).jpg">';
L.control.window(bjelovar,{
title: 'Blivajsova ulica'
})
.content(content1)
.show()
});
});
我的建议是将每个标记的所有数据存储在一个对象中,然后循环遍历它。像这样:
// Each marker identified by its title
const markerData = {
'Blivajsova ulica': {
content: '<div class="modal-text">Ulica je ...',
coords: [45.899491, 16.844165]
},
'Četvrt vila' : {
content: '<div class="modal-text">Prethodno ulica T...',
coords: [45.896034, 16.845399]
}
// Add all the data
}
for (const [title, data] of Object.entries(markerData)) {
const marker = L.marker(data.coords,{icon:leafletIcon}).addTo(bjelovar);
marker1.on('click',function(){
L.control.window(bjelovar, { title })
.content(data.content)
.show()
});
}
当我们需要摆脱重复的动作时,我们将它们功能化掉(示例代码):
[
{lat: 45.899491, lon: 16.844165, title: 'Blivajsova ulica', text: '...'},
{lat: 45.896034, lon: 16.844399, title: 'Četvrt vila', text: '...'},
]
.forEach(({lat, lon, title, text}) => {
L.marker([lat, lon], {icon:leafletIcon}).addTo(bjelovar)
.on('click',
() => L.control.window(bjelovar, {title}).content(text).show()
)
})
我正在制作 Leaflet 地图,地图上有 37 个标记。有没有更短的方法来编写下面的代码,或者我是否必须像下面使用前 2 个标记那样编写 37 次点击事件?
const marker1 = L.marker([45.899491, 16.844165],{icon:leafletIcon}).addTo(bjelovar);
const marker2 = L.marker([45.896034, 16.845399],{icon:leafletIcon}).addTo(bjelovar);
marker1.on('click',function(){
const content1 = '<div class="modal-text">Ulica je nosila naziv po Josipu Blivajsu do početka 1930-tih godina kada postaje Ulica Frana Supila. Vodi od središnjeg Trga Eugena Kvaternika do Šetališta dr. Ivše Lebovića odnosno Dječjeg odjela knjižnice. Neke od najznačajnijih građevina svakako su njezine uglovnice: nekadašnje svratište Zvijezda te kuća Ivana Ružića uz trg, zgrada Prve hrvatske štedionice, zgrada Kraljevskog poštanskog i brzojavnog ureda te gostiona J. Svobode na kraju ulice.</div> <img class="modal-img" src="./images/full/Blivajsova/01 Blivajsova ulica (oko 1900).jpg"> <img class="modal-img" src="./images/full/Blivajsova/02 Blivajsova ulica (oko 1902).jpg"> <img class="modal-img" src="./images/full/Blivajsova/03 Blivajsova ulica (oko 1907).jpg">';
L.control.window(bjelovar,{
title: 'Blivajsova ulica'
})
.content(content1)
.show()
});
marker2.on('click',function(){
const content2 = '<div class="modal-text">Prethodno ulica Teodora Georgijevića, dobila je ime Tomaša Masaryka početkom 1930-tih godina. Formirana je širenjem grada u jugoistočnom pravcu, uvjetovanim dolaskom željeznice. Zamišljena je kao reprezentativan pojas historicističkih i secesijskih stambenih vila s kovanim ogradama i zelenilom prema ulici.</div> <img class="modal-img" src="./images/full/Cetvrt/01 Četvrt vila (oko 1909).jpg"> <img class="modal-img" src="./images/full/Cetvrt/02 Četvrt vila (oko 1912).jpg"> <img class="modal-img" src="./images/full/Cetvrt/03 Četvrt vila (oko 1914).jpg">';
L.control.window(bjelovar,{
title: 'Četvrt vila'
})
.content(content2)
.show()
});
您可以将标记添加到特征组,然后读出标记并在循环中添加侦听器。
const group = L.featureGroup().addTo(bjelovar);
const marker1 = L.marker([45.899491, 16.844165],{icon:leafletIcon}).addTo(group);
const marker2 = L.marker([45.896034, 16.845399],{icon:leafletIcon}).addTo(group);
group.eachLayer((layer)=>{
layer.on('click',function(){
const content1 = '<div class="modal-text">Ulica je nosila naziv po Josipu Blivajsu do početka 1930-tih godina kada postaje Ulica Frana Supila. Vodi od središnjeg Trga Eugena Kvaternika do Šetališta dr. Ivše Lebovića odnosno Dječjeg odjela knjižnice. Neke od najznačajnijih građevina svakako su njezine uglovnice: nekadašnje svratište Zvijezda te kuća Ivana Ružića uz trg, zgrada Prve hrvatske štedionice, zgrada Kraljevskog poštanskog i brzojavnog ureda te gostiona J. Svobode na kraju ulice.</div> <img class="modal-img" src="./images/full/Blivajsova/01 Blivajsova ulica (oko 1900).jpg"> <img class="modal-img" src="./images/full/Blivajsova/02 Blivajsova ulica (oko 1902).jpg"> <img class="modal-img" src="./images/full/Blivajsova/03 Blivajsova ulica (oko 1907).jpg">';
L.control.window(bjelovar,{
title: 'Blivajsova ulica'
})
.content(content1)
.show()
});
});
我的建议是将每个标记的所有数据存储在一个对象中,然后循环遍历它。像这样:
// Each marker identified by its title
const markerData = {
'Blivajsova ulica': {
content: '<div class="modal-text">Ulica je ...',
coords: [45.899491, 16.844165]
},
'Četvrt vila' : {
content: '<div class="modal-text">Prethodno ulica T...',
coords: [45.896034, 16.845399]
}
// Add all the data
}
for (const [title, data] of Object.entries(markerData)) {
const marker = L.marker(data.coords,{icon:leafletIcon}).addTo(bjelovar);
marker1.on('click',function(){
L.control.window(bjelovar, { title })
.content(data.content)
.show()
});
}
当我们需要摆脱重复的动作时,我们将它们功能化掉(示例代码):
[
{lat: 45.899491, lon: 16.844165, title: 'Blivajsova ulica', text: '...'},
{lat: 45.896034, lon: 16.844399, title: 'Četvrt vila', text: '...'},
]
.forEach(({lat, lon, title, text}) => {
L.marker([lat, lon], {icon:leafletIcon}).addTo(bjelovar)
.on('click',
() => L.control.window(bjelovar, {title}).content(text).show()
)
})