Получить экранные координаты кинетического изображения в Javascript?

0

Я пишу приложение и использую Kinetic JS-библиотеку для загрузки изображения с клиентского компьютера. Изображение содержится в фотообъекте и инициализируется ниже.

     var photoObj = new Image();

     photoObj.onload = function() {
          var photoImage = new Kinetic.Image({
            x: 0,
            y: 0,
            image: photoObj,
            width: photoObj.width,
            height: photoObj.height,
            name: "photo",
            id: "photo"
          });
      photoGroup.removeChildren();              
      photoGroup.add(photoImage);

Объект включен в объект Kinetic Group с именем photoGroup, который создается ранее.

photoGroup = new Kinetic.Group({
    x : 0,
    y : 0,
    draggable : true,
    id : "photoGroup"
});

photoLayer = new Kinetic.Layer({
    drawBorder: true
});

photoLayer.add(photoGroup);

stage = new Kinetic.Stage({
    container : "kinetic-kard-preview",
    width : 320,
    height : 480
});

stage.add(photoLayer);
stage.draw();

Объект group включен в объект Kinetic Layer с именем photoLayer, который включен в объект Kinetic Stage, названный stage.

Во всяком случае, мой вопрос: теперь я хочу получить координаты экрана изображения. Я успешно получил координаты этапа

var containerOffset=$("#kinetic-kard-preview").offset();
var offsetX=containerOffset.left;
var offsetY=containerOffset.top;
console.log(offsetX);//455.859375 
console.log(offsetY);//218

но я не могу сделать то же самое для изображения. Когда я просматривал исходный код веб-страницы, я заметил, что сгенерированный html-код холста, который содержит изображение, выглядит примерно так.

<canvas width="320" height="480" style="padding: 0px; margin: 0px; border: 0px; background-color: transparent; width: 320px; height: 480px; position: absolute; background-position: initial initial; background-repeat: initial initial;"></canvas>

Как получить координаты экрана изображения после загрузки с клиентского компьютера на холст? Пожалуйста помоги!!! Спасибо.


спасибо за ваш ответ, но он, похоже, не может получить то, что мне нужно. Я просто добавил ссылку на скриншот здесь:

Изображение 174551

Как вы можете видеть на картинке, координаты изображения не совпадают с координатами этапа, который содержит его. Я написал событие mousemove и вычислил - расстояние между координатой экрана x сцены (т.е. OffsetX) и координатой экрана x изображения. - расстояние между координатой экрана y (например, offsetY) и координатой экрана y изображения.

Все они имеют одинаковое число.... 24 (как показано на экране). Используя событие mousemove, я вручную получил значения offsetX, offsetY, а координаты экрана x и y изображения - 455, 218, 479 и 242.

Тем не менее, моя проблема заключается в том, как получить эти цифры автоматически, особенно координаты экрана изображения, после загрузки изображения с моего компьютера. Я напечатал значения gPos для console.log и получил значения (0,0). Поэтому, когда я добавил offsetX и offsetY к этим значениям, они одинаковы (455,218), а не (479,242). Пожалуйста, дайте мне знать, что мне теперь делать? В очередной раз благодарим за помощь.

Теги:
kineticjs

1 ответ

0

Ваш Kinetic.Image находится в позиции [0,0] в перетаскиваемой Kinetic.Group.

Таким образом, вы можете получить свою позицию изображения, добавив:

  • Переходы # kinetic-kard-preview

  • Плюс текущая позиция группы: group.position()

[Добавлен код для KineticJS версии 4.5.1]

Вот пример кода для v4.5.1 и демо: http://jsfiddle.net/m1erickson/NXH9X/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Prototype</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.5.1.min.js"></script>
<style>
body{padding:20px; background:ivory;}
#kinetic-kard-preview{
  margin-top: 10px;
  width:350px;
  height:350px;
  border:1px solid gray;
}
#target{position:absolute;top:200px;left:150px;opacity:0.50;}
</style>        
<script>
$(function(){

//
$pos=$("#results");

//
var containerOffset=$("#kinetic-kard-preview").offset();
var offsetX=containerOffset.left;
var offsetY=containerOffset.top;

//
var stage = new Kinetic.Stage({
    container: 'kinetic-kard-preview',
    width: 350,
    height: 350
});

//
photoLayer = new Kinetic.Layer({
    drawBorder: true
});
stage.add(photoLayer);

//
photoGroup = new Kinetic.Group({
    x : 0,
    y : 0,
    draggable : true,
    id : "photoGroup"
});
photoGroup.on("dragmove",function(){
    var gPos=photoGroup.getPosition();
    var x=parseInt(offsetX+gPos.x);
    var y=parseInt(offsetY+gPos.y);
    $pos.text("photoImage: screenX="+x+", screenY="+y);
});
photoLayer.add(photoGroup);

//
 var photoObj = new Image();
 photoObj.onload = function() {
    var photoImage = new Kinetic.Image({
      x: 0,
      y: 0,
      image: photoObj,
      width: photoObj.width,
      height: photoObj.height,
      name: "photo",
      id: "photo"
    });
    photoGroup.add(photoImage);
    photoLayer.draw();
}
photoObj.src="https://dl.dropboxusercontent.com/u/139992952/multple/norwayFlag.jpg";


}); // end $(function(){});
</script>       
</head>
<body>
    <h4>Semi-transparent flag is at screen position 150,200</h4>
    <p id=results>Drag the opaque flag and see screen position</p>
    <img id=target src='https://dl.dropboxusercontent.com/u/139992952/multple/norwayFlag.jpg'>
    <div id="kinetic-kard-preview"></div>
</body>
</html>
  • 0
    TNX для вашего ответа. извините, я не могу ответить вам прямо сейчас, в моей системе произошла ошибка. я дам вам знать, если это сработает, как только я исправлю свою систему и смогу протестировать код. TNX снова для вашего ответа.
  • 0
    group.position ()? Вы имели в виду photoGroup.position (), photoGroup.getPosition () или photoGroup.getAbolutePosition ()? Я попробовал все из них, но ни один из них не работал. Метод позиционирования не существует. А остальные 2 всегда возвращают объект, состоящий из 2 значений: x = 0 и y = 0. Это координаты фотообъекта на холсте / сцене, а не на всем экране. Мне нужно получить координаты экрана изображения или фото объекта. Пожалуйста помоги.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню