[英]Javascript/CSS not working as expected, elements not displaying/updating
该脚本使用户能够创建一个以标记为中心的圆,并可以交互地更改圆的直径。 下面的 HTML 中存在问题。
当我在导航器 (Chrome) 中启动此 html 时,范围栏和关联的填充框是唯一显示的元素。 此外,当我使用范围栏更改值时,框架中的值不会更新。
我认为这个问题与 CSS 和 Javascript 的集成有关。 但我看不出有什么问题。
function map() { let set = 10; let zoom = 9; let circles; let entreprise = [43.600000, 1.433333]; let mymap = L.map('mapid').setView(entreprise, zoom); let osmLayer = L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://osm.org/copyright">OpenStreetMap</a> contributors', maxZoom: 18 }); mymap.addLayer(osmLayer); L.marker(entreprise).addTo(mymap); // On retranscrit la valeur du input range dans le input Number (et inversement) $('.range').on('input', function() { set = $(this).val(); $('.kilometres').val(set); }); $('.kilometres').on('input', function() { set = $(this).val(); $('.range').val(set); }); circles = L.circle(entreprise, 1000*set, { color: 'red', fillColor: '#f03', fillOpacity: 0.5 }).addTo(mymap); $( ".range, .kilometres" ).on('input', function() { if(mymap.hasLayer(circles)) mymap.removeLayer(circles); circles = L.circle(entreprise, 1000*set, { color: 'red', fillColor: '#f03', fillOpacity: 0.5 }).addTo(mymap); }); } map();
div.row { width: 700px; margin: 0 auto; } div > input { display: block; width: 300px; margin: 10px; } #mapid { height: 250px; width: 300px; }
<div class="row"> <div class="col-xs-6"> <input type="number" class="kilometres" name="kilometres" min="0" max="100" placeholder="15" value="15" /> <input type="range" class="range" name="range" min="0" max="100" step="1" value="15" /> </div> <div class="col-xs-6"> <div id="mapid"></div> </div> </div>
看起来好像您缺少一些脚本导入。 你需要wrld.js
jQuery.js
和leaflet.css
才能工作。
尝试:
<!DOCTYPE html>
<html>
<head>
<title>Circle variable</title>
<meta charset="utf-8" />
<!-- Import Leaflet.css -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.1/leaflet.css">
<style>
div.row {
width: 700px;
margin: 0 auto;
}
div > input {
display: block;
width: 300px;
margin: 10px;
}
#mapid {
height: 250px;
width: 300px;
}
</style>
</head>
<body>
<div class="row">
<div class="col-xs-6">
<input type="number" class="kilometres" name="kilometres" min="0" max="100" placeholder="15" value="15" />
<input type="range" class="range" name="range" min="0" max="100" step="1" value="15" />
</div>
<div class="col-xs-6">
<div id="mapid"></div>
</div>
</div>
<!-- Import jQuery -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.2/jquery.min.js">
<!-- Import Wrld 3d -->
<script type="text/javascript" src="https://unpkg.com/wrld.js@1.x.x">
<script>
function map() {
let set = 10;
let zoom = 9;
let circles;
let entreprise = [43.600000, 1.433333];
let mymap = L.map('mapid').setView(entreprise, zoom);
let osmLayer = L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://osm.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18
});
mymap.addLayer(osmLayer);
L.marker(entreprise).addTo(mymap);
// On retranscrit la valeur du input range dans le input Number (et inversement)
$('.range').on('input', function() {
set = $(this).val();
$('.kilometres').val(set);
});
$('.kilometres').on('input', function() {
set = $(this).val();
$('.range').val(set);
});
circles = L.circle(entreprise, 1000*set, {
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5
}).addTo(mymap);
$( ".range, .kilometres" ).on('input', function() {
if(mymap.hasLayer(circles))
mymap.removeLayer(circles);
circles = L.circle(entreprise, 1000*set, {
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5
}).addTo(mymap);
});
}
map();
</script>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.