gpt4 book ai didi

javascript - 是否可以通过拖动更改背景位置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:37 24 4
gpt4 key购买 nike

我有一个使用世界地图图像作为背景的 html map 。

我可以制作一个改变 div 背景位置的 js 函数,但我喜欢在用户点击 map 然后像谷歌地图一样拖动时改变背景位置。

所以我这里有一个示例页面:http://lab.qacode.com/map使用 http://lab.qacode.com/map/map.jpg

如果有任何建议或提示,我将不胜感激。

最佳答案

完成这项工作的一个简单方法是使用 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;
}
}
});

放置标记

可以在 map 上放置标记(或其他)。这非常简单,坐标基于 Canvas 内的像素。对于测试用例中的标记,它距 Canvas 左侧和顶部 150 像素。

// 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>");

现在介绍一些更高级的东西,即(不)著名的 Google map 图钉。

// 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
});

参见 test case on jsFiddle

关于javascript - 是否可以通过拖动更改背景位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054524/

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