Antworten auf deine Fragen:
Neues Thema erstellen

KineticJS - Wie Image ansprechen

MiezeKathi

Noch nicht viel geschrieben

Hallo,

Ich bin dabei ein Einrichtungstool umzusetzen. Dabei verwende ich KineticJS. Drag and Drop funktioniert schon bei allen Objekten.

Problem habe ich beim Drehen und beim Speichern.
Per Buttonklick soll sich das aktuelle/geklickte Objekt drehen bzw. löschen. Momentan geht das nur mit Image1. Wie kann ich das auf alle anwenden?

HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link rel = "stylesheet" type = "text/css" href = "style.css"/>
<title>Einrichtungstool</title>
</head>
<body>

<!-- TOOLBAR -->
	<div id="toolleiste">
		<ul>
				<li id="iconLi"><a href="index.html" title="Zurück"><img id="icon" src= "img/icons/zurueck.png" /></a></li> 
				<button id="rotate" title="Drehen">Drehen</button>
				<!--<li id="iconLi"><img id="icon" src= "img/icons/loeschen.png" title="Löschen"/></li> -->
				<button id="delete" title="Löschen">Löschen</button>
				<!--<li id="iconLi"><img id="icon" src= "img/icons/speichern.png" title="Speichern"/></li>-->
				<button id="save" title="Speichern">Speichern</button>
		</ul>
	</div>

	<!-- OBJECTBOX -->
	<div id="objectbox">
	<canvas id='myCanvas'></canvas>
	</div>

	<div class="room">
	</div>

	<div id="footer">
	&copy; 2013 Theres Scheucher mt111018, Katharina Spitzer mt111036
	</div>

<div id="container"></div>
<script src="jquery-1.9.1.min.js"></script>
  	<script src="canvasutilities.js"></script>
    <script src="kinetic-v4.6.0-beta.js"></script>
    <script defer="defer">

    var stage;
   
    var img1;
    var img2;
    var layer;

      function loadImages(sources, callback) {
        var images = {};
        var loadedImages = 0;
        var numImages = 0;
        // get num of sources
        for(var src in sources) {
          numImages++; 
        }
        for(var src in sources) {
          images[src] = new Image();
          images[src].onload = function() {
            if(++loadedImages >= numImages) {
              callback(images);
            }
          };
          images[src].src = sources[src];
        }
      }

      function initStage(images) {
        stage = new Kinetic.Stage({
          container: 'container',
          width: window.innerWidth,
          height: window.innerHeight
        });
        layer = new Kinetic.Layer();

        img1 = new Kinetic.Image({
          id: "img1",
          image: images.img1,
          x: 70,
          y: 70,
          width: 100,
          height: 100,
          draggable: true,
          visible: true,
          name: 'img1',
          offset: [50, 50] // move center point to the center of the img with offset
        });

        img2 = new Kinetic.Image({
          id: "img2", 
         image: images.img2,
          x: 20,
          y: 125,
          draggable: true,
          visible: true,
          name: 'img2'
        });

		layer.add(img1);
		layer.add(img2);
        stage.add(layer);
        
        layer.on('mouseover', function(evt) {
          var shape = evt.shape;
          document.body.style.cursor = 'pointer'; 
          layer.draw();
        });
        layer.on('mouseout', function(evt) {
          var shape = evt.shape;
          document.body.style.cursor = 'default';  
          layer.draw();
        });
      }
      var sources = {
        img1: 'img/objects/kueche/spuele1.png',
        img2: 'img/objects/kueche/spuele2.png'
      };
      loadImages(sources, initStage);



// DREHEN
$("#rotate").click(function () {
var imgRotate=90*Math.PI/180;
img1.rotate(imgRotate);
layer.draw();
});

// LÖSCHEN
$("#delete").click(function () {
img1.hide();
layer.draw();
});

// SPEICHERN
 document.getElementById('save').addEventListener('click', function() {
        /*
         * since the stage toDataURL() method is asynchronous, we need
         * to provide a callback
         */
        stage.toDataURL({
        width: window.innerWidth,
        height: window.innerHeight,
        mimeType: "image/jpeg",
        callback: function(dataUrl) {
          /*
           * here you can do anything you like with the data url.
           * In this tutorial we'll just open the url with the browser
           * so that you can see the result as an image
           */
          window.open(dataUrl);
        }
      });
    }, false);
</script>
</body>
</html>
 

Duddle

Posting-Frequenz: 14µHz

AW: KineticJS - Wie Image ansprechen

Bitte gib in Zukunft an, welche externen Bibliotheken du verwendest. Ich kann zwar nach "canvasutilities.js" googlen, aber es könnte sein, dass ich die falsche Datei erwische.

Abgesehen davon solltest du, und das habe ich schon das letzte Mal gesagt, im ersten Schritt immer die Fehlerkonsole betrachten. Hier hat sie mir sofort gesagt
Unable to get image data from toDataURL( ), Getting error SECURITY_ERR: DOM Exception 18
Diese Meldung kann ich suchen und finde sofort Lösungsansätze. Einer davon ist, dass du das auf einem Webserver (auch lokal) laufen haben musst, statt die Datei einfach von der Festplatte zu holen, sonst erlaubt der Browser das nicht. Sobald ich deinen Code im lokalen Webserver ausprobiere, funktioniert es wie erwartet.


Duddle
 

MiezeKathi

Noch nicht viel geschrieben

AW: KineticJS - Wie Image ansprechen

Sorry, mache ich in Zukunft. Und nochmal sorry - ich meine natürlich DREHEN und LÖSCHEN! Das mit dem Speichern klappt (Fehlermeldung war mir bereits bekannt)!
 

Duddle

Posting-Frequenz: 14µHz

AW: KineticJS - Wie Image ansprechen

Oh, habe ich mich verlesen? Sorry.

Jedenfalls funktioniert auch das Drehen und Löschen (und danach Speichern) einwandfrei bei mir. Ich benutze einen uralten Chrome-Browser, also sollte Browser-Kompatibilität nicht die Ursache sein.

Edit: bla, schon wieder verlesen. Es funktioniert für das erste Bild, aber nur für das. Okay, ich editiere dann hier die Lösung oder so rein.
Edit2: Deine Drehen- bzw. Löschen-Funktionen sprechen ja auch explizit img1 an. Es ist also kein Fehler, du hast die Funktionalität einfach noch nicht eingebaut.


Duddle
 
Zuletzt bearbeitet:

MiezeKathi

Noch nicht viel geschrieben

AW: KineticJS - Wie Image ansprechen

nein, ich habe mich anfangs verschrieben - sorry dafür.
ja genau ich spreche daweil nur img1 an, das ist richtig... ich weiss einfach nicht wie ich das hinbekomme. ich weiß nicht wie ich das aktive objekt (img) ansprechen soll.

ich würde das mit evt.target und getElementbyId machen, jedoch werden die imgs aufs canvas gezeichnet und da bekomm ich die img ids irgendwie nicht raus.
 

Duddle

Posting-Frequenz: 14µHz

AW: KineticJS - Wie Image ansprechen

Naja, du klickst für die Funktionen ja auf einen Button, also hilft dir der eigentliche Klick-Event auch nicht direkt. Der Button hat ja keine Ahnung, was du genau Löschen willst. Du musst also irgendwie Logik einbauen, die den Nutzer danach fragt.

Entweder kommt bei Klick auf Löschen also irgendeine PopUp alá "welches dieser 3 Objekte willst du löschen?", dann kannst du diese Auswahl auswerten.

Oder, und das ist exakt die Lösung, die ich vor ein paar Wochen in deinem alten Thread angesprochen hatte, du merkst dir bei Klick auf ein Bild, dass dieses gerade "aktiv" ist. Dafür braucht jedes Bild einen click-Event-Handler (für KineticJS habe ich ein entsprechendes Beispiel gefunden) in welchem du eine globale Variable mit dem geklickten Bild zuweist. Idealerweise malst du dann das Bild irgendwie anders (rot umrandet o.ä.). Beim Löschen prüfst du dann, ob die globale Variable gefüllt ist und löschst dann das.

Edit: auf der verlinkten Seite gibt es links mehrere Event-bezogene Tutorials.


Duddle
 
Zuletzt bearbeitet:

MiezeKathi

Noch nicht viel geschrieben

AW: KineticJS - Wie Image ansprechen

ok, danke (auch wenn schon mal geschrieben) für die Tipps. Ich werd's mal versuchen und hoffe ich bekomme es hin.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben