javascript - 使用kinetic.js替换HTML5 Canvas 中的图像?

标签 javascript image html canvas kineticjs

嘿伙计们,我正在尝试通过单击同一列表中的下一个图像来替换 html5 Canvas 上加载的图像。 就像我有两个使用不同函数进入 Canvas 的图像列表。 现在我想要的是在单击下一张图片时替换第一张上传的图片。 其他列表也是如此。 请帮帮我谢谢..

             <script src="kinetic-v1.js">
             </script>
            <script>
            function drawImage(imageObj){
             var stage = new Kinetic.Stage("container", 578, 500);
             var layer = new Kinetic.Layer();
             var x = stage.width / 2 - 200 / 2;
             var y = stage.height / 2 - 137 / 2;
             var width = 200;
             var height = 137;

            // darth vader
              var darthVaderImg = new Kinetic.Shape(function(){
                var context = this.getContext();
                context.drawImage(imageObj, x, y, width, height);
                // draw invisible detectable path for image
                context.beginPath();
                context.rect(x, y, width, height);
                context.closePath();
            });

            // enable drag and drop
               darthVaderImg.draggable(true);

            // add cursor styling
               darthVaderImg.on("mouseover", function(){
               document.body.style.cursor = "pointer";
            });
            darthVaderImg.on("mouseout", function(){
                document.body.style.cursor = "default";
            });
            //remove image on double click
              darthVaderImg.on("dblclick dbltap", function(){
              layer.remove(darthVaderImg);


              layer.draw();
                });
              layer.add(darthVaderImg);
              stage.add(layer);
        }
         function drawImage2(imageObj){
            var stage = new Kinetic.Stage("container", 578, 500);
         var layer = new Kinetic.Layer();
            var x = stage.width / 2 - 100 ;
            var y = stage.height / 2 - 137 ;
            var width = 200;
            var height = 137;

            // darth vader
            var darthVaderImg2 = new Kinetic.Shape(function(){
                var context = this.getContext();
                context.drawImage(imageObj, x, y, width, height);
                // draw invisible detectable path for image
                context.beginPath();
                context.rect(x, y, width, height);
                context.closePath();
            });

            // enable drag and drop
            darthVaderImg2.draggable(true);

            // add cursor styling
            darthVaderImg2.on("mouseover", function(){
                document.body.style.cursor = "pointer";
            });
            darthVaderImg2.on("mouseout", function(){
                document.body.style.cursor = "default";
            });
            //remove image on double click
            darthVaderImg2.on("dblclick dbltap", function(){
            layer.remove(darthVaderImg2);


            layer.draw();
                });
            layer.add(darthVaderImg2);
            stage.add(layer);
            }

           function load(img){

            // load image
            var imageObj = new Image();
            imageObj.onload = function(){
                drawImage(this);

            };
            imageObj.src = img.src;
            };
              function load2(img){
               // load image
               var imageObj = new Image();
               imageObj.onload = function(){
                drawImage2(this);
             };
              imageObj.src = img.src;
            };
             </script>
             <title>HTMl5 drag drop multiple elements</title></head>
              <body onmousedown="return false;">
              <div id="container">
             </div>
            <ul id="img"> <li><a href="#" onclick="load(document.getElementById('i1'))">
    <img src="dog.png" id="i1" alt="doggie" width="60" height="55"/>
    </a></li>
    <li>
        <a href="#" onclick="load(document.getElementById('i2'))">
        <img src="dog2.png" id="i2" alt="Pulpit rock" width="60" height="55" /></a>
    </li>
    </ul>
    <ul id="img1">
        <li><a href="#" onclick="load2(document.getElementById('i4'))">
            <img alt="doggie" src="beach.png" id="i4" width="60" height="55" />
            </a></li>
            <li><a href="#" onclick="load2(document.getElementById('i5'))">
            <img alt="doggie" src="cat3.png" id="i5" width="60" height="55" /></a></li>
            </ul>
            </body>
            </html>

最佳答案

这里..我刚刚更新了kineticJs库并使用了一个额外的标签.. 由 friend 浆果提供

       <script src="kinetic-v3.8.0.min.js">
       </script>
       <script>
        var stage = null;
        var groups = {
            dog: null,
            bla: null
        }

        function setupStage() {
            stage = new Kinetic.Stage("container", 578, 500);
        };

        function drawImageOnLayer(layer, img) {
            var x = stage.width / 2 - 100 ;
            var y = stage.height / 2 - 137 ;
            var width = 200;
            var height = 137;

            var kinecticImg = new Kinetic.Shape(function(){
                var context = this.getContext();
                context.drawImage(img, x, y, width, height);
                // draw invisible detectable path for image
                context.beginPath();
                context.rect(x, y, width, height);
                context.closePath();
            });

            // enable drag and drop
            kinecticImg.draggable(true);

            layer.clear();
            layer.add(kinecticImg);
            layer.draw();
        }
         function drawImageOnLayer2(layer, img) {
            var x = stage.width / 2 - 300 ;
            var y = stage.height / 2 - 237 ;
            var width = 200;
            var height = 137;

            var kinecticImg = new Kinetic.Shape(function(){
                var context = this.getContext();
                context.drawImage(img, x, y, width, height);
                // draw invisible detectable path for image
                context.beginPath();
                context.rect(x, y, width, height);
                context.closePath();
            });

            // enable drag and drop
            kinecticImg.draggable(true);

            layer.clear();
            layer.add(kinecticImg);
            layer.draw();
        }

        function loadWithType(type, img) {
            if (groups[type]) {
                stage.remove(groups[type]);
            } 
            groups[type] = new Kinetic.Layer();
            stage.add(groups[type]);

            drawImageOnLayer(groups[type], img);
        };
        function loadWithType2(type, img) {
            if (groups[type]) {
                stage.remove(groups[type]);
            } 
            groups[type] = new Kinetic.Layer();
            stage.add(groups[type]);

            drawImageOnLayer2(groups[type], img);
        };
          </script>
          <title>HTMl5 drag drop multiple elements</title></head>
           <body onload="setupStage();" onmousedown="return false;">
           <div id="container">
           </div>

      <ul id="img"> <li><a href="#"onclick="loadWithType 
        ('dog',document.getElementById('i1'))">
    <img src="dog.png" id="i1" alt="doggie" width="60" height="55"/>
    </a></li>
    <li>
        <a href="#" onclick="loadWithType('dog', document.getElementById('i2'))">
        <img src="dog2.png" id="i2" alt="Pulpit rock" width="60" height="55" /></a>
    </li>
    </ul>
    <ul id="img1">
     <li><a href="#" onclick="loadWithType2('bla', document.getElementById('i4'))">
    <img alt="doggie" src="beach.png" id="i4" width="60" height="55" />
    </a></li>
   <li><a href="#" onclick="loadWithType2('bla', document.getElementById('i5'))">
    <img alt="doggie" src="cat3.png" id="i5" width="60" height="55" /></a></li>
   </ul>
   </body>

关于javascript - 使用kinetic.js替换HTML5 Canvas 中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411507/

相关文章:

javascript - SproutCore 的特定 URL

javascript - 如何在 Node JS 中生成和验证给定字符串的校验和

objective-c - 安全存储大图像的正确做法

arrays - Julia 将图像从 URL 直接下载到内存中

html - 固定标题不会随正文水平滚动

html - 如何强制菜单到三 Angular 形边框后面

javascript - 鼠标悬停时一张图片覆盖另一张图片

Java 分层图像

javascript - Tokenfield 不适用于 Bootstrap “has-error” 类

javascript - 在 jquery animate 函数中使用变量时出现语法错误