質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • Monaca

    1139questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • AngularJS

    611questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

  • Onsen UI

    362questions

    HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

  • CreateJS

    29questions

    CreateJSは、HTML5でリッチコンテンツを制作できるJavaScriptライブラリ群です。JavaScriptの知識があれば、HTML5のCanvasをコントロールしコンテンツを作ることができます。

CreateJSでの画像の移動について

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,150

huckepain

score 2

Monacaで作成しております。
CreateJSで画像をタップした場所で基準点にして移動させたいのですが、
関数・プロパティで取得できるのか、どういう計算をしたらいいのかがわかりませんでした。
*画像の真ん中はわかりましたが、タップした場所の取得がわかりませんでした。拡大・縮小しても影響でないようにしたいです。
ご教授をお願い致します。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
  <script src="components/loader.js"></script>
  <script src="components/EaselJS/lib/easeljs-NEXT.min.js"></script>
  <script src="components/TweenJS/lib/tweenjs-NEXT.min.js"></script>
  <script src="lib/angular/angular.min.js"></script>
  <script src="lib/onsenui/js/onsenui.min.js"></script>
  <script src="lib/onsenui/js/angular-onsenui.min.js"></script>
  <script src="components/monaca-jquery/jquery.js"></script>

  <link rel="stylesheet" href="components/loader.css">
  <link rel="stylesheet" href="lib/onsenui/css/onsenui.css">
  <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css">
  <link rel="stylesheet" href="css/style.css">

  <script>
    var cj = createjs;
    ons.bootstrap()
      .controller('HelloController', function() {
        //this.world = 'World';
        console.log("HelloController");

        ons.ready(function() {
            var imgMap = new Image();
            //適当な画像を入れてください。
            imgMap.src = "guidemap002.jpg";
            //適当な画像を入れてください。
            var imgCon = new Image();
            imgCon.src = "contents.png";



            var canvas;
            var stage;
            var child;

            var childCon;
            var container;
            var intervalID;

            imgMap.onload = function () {

                var maxWidth = $(window).width() - 10;
                var maxHeight = $(window).height() - 40;
                var scale = 1;
                canvas = document.getElementById('canvasID');
                if (!canvas
                    || !canvas.getContext) {
                        return false; 
                }

                stage = new cj.Stage(canvas);
                cj.Touch.enable(stage);

                var path = getPath();                
                container = new cj.Container();

                child = new cj.Bitmap(imgMap);
                                child.x = 0;
                child.y = 0;

                container.addChild(child);

                //現在位置設定
                childCon = new cj.Bitmap(imgCon);
                container.addChild(childCon);

                intervalID = setInterval(
                    function() {
                        childCon.visible = !childCon.visible;
                        stage.update();
                    }
                ,1000);

                if (imgMap.naturalWidth < maxWidth) {
                    canvas.width = imgMap.naturalWidth;
                    canvas.height = imgMap.naturalHeight;
                    scale = 1;
                } else {
                    canvas.width = maxWidth;

                    scale = maxWidth / imgMap.naturalWidth;
                    var hieght = imgMap.naturalHeight * scale;

                    canvas.height = maxHeight;
                }
                child.scaleX = scale;
                child.scaleY = scale;

                childCon.scaleX = 20 / childCon.getBounds().width * scale;
                childCon.scaleY = childCon.scaleX;
                childCon.x = 200 * scale;
                childCon.y = 200 * scale;

                stage.addChild(container);

                stage.update();
            }

            var pinchflg = false;
            var hirituX;
            var hirituY;

            $(document).on('dragstart', 'canvas', function(event) {
            });

            $(document).on('drag', 'canvas', function(event) {
                if (!pinchflg) {
                    // container.x = stage.mouseX;
                    // container.y = stage.mouseY;
                    console.log("x:" + container.getBounds().width + ";" 
                        + stage.mouseX + ";" 
                        + container.getObjectUnderPoint().x + ";" 
                        + event.rawX);
                    console.log("y:" + container.getBounds().height + ";" 
                        + stage.mouseY + ";" 
                        + child.getBounds().height);

                    container.x = stage.mouseX;
                    container.y = stage.mouseY;

           //基準点
                    //ここを変えればいいのですが…。
                    container.regX = container.getBounds().width / 2;
                    container.regY = container.getBounds().height / 2;

                    stage.update();
                }
            });

            $(document).on('pinch', 'canvas', function(event) {
                pinchflg = true;

                var scale = event.originalEvent.gesture.scale;
                var gesture = event.originalEvent.gesture;

                container.scaleX = scale;
                container.scaleY = scale;

                stage.update();
            });

            $(document).on('transformend', 'canvas', function(event) {
                pinchflg = false;
            });

            $(document).on('touchstart', 'canvas', function(event) {
                event.preventDefault();
            });

        });


    });
    getPath = function() {
        var pathname = location.pathname;
        var i = pathname.lastIndexOf('/');

        return pathname.substring(0, i+1);
    };
    ons.ready(function() {
        console.log("Onsen UI is ready!");
    });
  </script>
</head>
<body>
  <ons-page ng-controller="HelloController as hello">
    <ons-toolbar>
      <div class="center">Introduction</div>
    </ons-toolbar>

    <ons-gesture-detector>
        <canvas id="canvasID" width="500" height="500"></canvas>
    </ons-gesture-detector>
  </ons-page>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Monaca

    1139questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • AngularJS

    611questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

  • Onsen UI

    362questions

    HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

  • CreateJS

    29questions

    CreateJSは、HTML5でリッチコンテンツを制作できるJavaScriptライブラリ群です。JavaScriptの知識があれば、HTML5のCanvasをコントロールしコンテンツを作ることができます。