是否可以通过拖动来改变背景位置?

时间:2011-05-19 06:08:39

标签: javascript jquery css background

我有一张以世界地图图片为背景的html地图。

我可以创建一个改变div背景位置的js函数,但是当用户点击地图然后像google map一样拖动时,我喜欢改变背景位置。

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

我很感激任何建议或提示。

1 个答案:

答案 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
    });

请参阅test case on jsFiddle