Можно ли изменить положение фона с помощью перетаскивания? - PullRequest
3 голосов
/ 19 мая 2011

У меня есть html-карта, в которой в качестве фона используется изображение карты мира.

Я могу создать функцию js, которая изменяет положение фона div, но мне нравится менять положение фона, когда пользователь нажимает на карту и перетаскиваеткак карта Google.

, поэтому у меня есть образец страницы здесь: http://lab.qacode.com/map, который использует http://lab.qacode.com/map/map.jpg

Буду признателен за любой совет или совет.

1 Ответ

7 голосов
/ 19 мая 2011

Простой способ сделать эту работу - использовать перетаскиваемый пользовательский интерфейс jQuery

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

Размещение маркеров

Возможно разместить маркер (или любой другой объект) на карте. Это очень просто, и координаты основаны на пикселях в пределах холста. Для маркера в тестовом случае это 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 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
    });

См. контрольный пример на jsFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...