我有一张以世界地图图片为背景的html地图。
我可以创建一个改变div背景位置的js函数,但是当用户点击地图然后像google map一样拖动时,我喜欢改变背景位置。
所以我在这里有一个示例页面:http://lab.qacode.com/map使用http://lab.qacode.com/map/map.jpg
我很感激任何建议或提示。
答案 0 :(得分:7)
使这项工作的一个简单方法是使用jQuery UI的draggable
<强> HTML 强>
<div id="map">
<div class="map-canvas"></div>
</div>
<强>的JavaScript 强>
// Pre-select elements
var map = $("#map"),
canvas = map.find(".map-canvas");
// Calculate canvas constraints
var maxLeft = map.width()-canvas.width(),
maxTop = map.height()-canvas.height();
// Make canvas draggable
canvas.draggable({
drag: function(e, ui) {
// Check if canvas is within constraints
if (ui.position.left > 0) {
ui.position.left = 0;
} else if (ui.position.left < maxLeft) {
ui.position.left = maxLeft;
}
if (ui.position.top > 0) {
ui.position.top = 0;
} else if (ui.position.top < maxTop) {
ui.position.top = maxTop;
}
}
});
放置标记
可以在地图上放置标记(或其他)。它非常简单,并且coords基于画布内的像素。对于测试用例中的标记,它从画布的左侧和顶部开始是150px。
// Create simple dot marker
$("<div></div>")
.addClass("map-marker")
.appendTo(canvas)
.offset(function(){
return { left: 150, top: 150 };
})
// Append a label
.append("<span><- Dot</span>");
现在更先进的东西,即(in)着名的Google Maps图钉。
// Create draggable Google Maps pin marker
var pin =
$("<div></div>")
.addClass("google-pin")
.appendTo(canvas)
.offset(function(){
return { left: 50, top: 50 };
})
// Bind mouseup/down for visual confirmation of grab
.bind({
mousedown: function(){
var os = pin.offset();
pin.offset(function(){
return { top: os.top-3 };
});
},
mouseup: function(){
var os = pin.offset();
pin.offset(function(){
return { top: os.top+3 };
});
}
})
// Make it draggable
.draggable({
start: function(e,ui){
ui.helper.offset(function(){
return { top: ui.offset.top-2 };
});
},
container: canvas
});