【问题标题】:Redrawing images using Kinetic JS Framework使用 Kinetic JS 框架重绘图像
【发布时间】:2013-02-10 10:22:57
【问题描述】:

大纲

我的问题涉及 KineticJS 的使用,但在我提出问题之前 - 我将概述项目然后讨论我的问题。

任务

我的任务是创建一个调整大小的壁炉环绕,以便所述个人可以使用数字形式来更改环绕的大小,唯一真正应该改变的是它的高度中的门框(两侧的腿)和对面的壁炉架顶部。

现在环绕需要由图像组成,因此它被分解为单独的元素,因此当图像的宽度被拉伸时,整个环绕不会。

我已经创建了画布并引用了我用于该项目的框架 KineticJs,以便从类似于 Adob​​e Flash 的易于使用的图层和舞台设计中受益。

问题

我的问题是在加载所有需要的图像后出现的。我使用了一点 JQUERY 来调用函数来绘制环绕并在文档准备好后加载它的单独部分。

一旦用户与数字表单交互,我就有一个更改事件函数准备好调整环绕的大小。

问题是所有环绕变量都包含在一个名为 drawsomething() 的函数中

现在它们是该函数的本地函数,我需要它们在另一个函数中。

我知道我可能必须重组我的代码才能使其正常工作。我只是不完全确定从哪里开始。

有人可以先给我指出正确的方向吗?

    <!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Canvas Project Two</title>
<script type="text/javascript" src="kinetic-v4.3.2.min.js"></script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>

$(document).ready(function(){
    drawSomething();
    $("#slider").change(function(){
        
        redraw();
        
        });
    
    
    })

    


    function drawSomething(){

    
    var imageObj = new Image();
    var leftMantel = new Image();
    var rightMantel = new Image();
    var leftJamb = new Image();
    var rightJamb = new Image();
    var leftFoot = new Image();
    var rightFoot =  new Image();   
    
        imageObj.src = "octon_mantel.png";
    
    imageObj.onload = function(){
    

    
    var image = new Kinetic.Image
        ({
            x:450,
            y:150,
            width:280,
            height:117,
            image: imageObj
        });

            layer.add(image);
            layer.draw();
}
            
    

    leftMantel.onload = function(){
    var LeftMant = new Kinetic.Image({
            
            x:300,
            y:150,
            width:150,
            height:117,
            image: leftMantel
            
        
        }); 
        
        layer.add(LeftMant);
        layer.draw();
    }
        
        
    rightMantel.onload = function(){
    var RightMant = new Kinetic.Image({
            
            x:730,
            y:150,
            width:150,
            height:117,
            image: rightMantel
            
        
        });
        
        layer.add(RightMant);
        layer.draw();
            }
        
        


    rightJamb.onload = function(){      
    var RightJamb = new Kinetic.Image({
            
            x:732,
            y:267,
            width:105,
            height:200,
            image: rightJamb
            
        
        });     
        
        layer.add(RightJamb);
        layer.draw();
        }
        
        
        
    rightFoot.onload = function(){  
    var RightFoot = new Kinetic.Image({
            
            x:732,
            y:465,
            width:104,
            height:127,
            image: rightFoot
            
        
        }); 
        
        layer.add(RightFoot);
        layer.draw();
        }
        
        
    
    
    
    leftJamb.onload = function(){
    var LeftJamb = new Kinetic.Image({
            
            x:343,
            y:267,
            width:105,
            height:200,
            image: leftJamb
            
        
        });
        
        layer.add(LeftJamb);
        layer.draw();
        
            }
        
        
    leftFoot.onload = function(){   
    var LeftFoot = new Kinetic.Image({
            
            x:344,
            y:465,
            width:104,
            height:127,
            image: leftFoot
            
        
        }); 
        
        layer.add(LeftFoot);
        layer.draw();
        
        }
        
    //Image Location Declaration
    imageObj.src = "octon_mantel.png";
    leftMantel.src = "octon_mantel_left.png";
    rightMantel.src = "octon_mantel_right.png";
    rightJamb.src = "octon_jamb_right.png";
    rightFoot.src = "octon_foot_right.png";
    leftJamb.src = "octon_jamb_left.png";
    leftFoot.src = "octon_foot_left.png";
    
    
    
    
    
    
    
    
    }
    
    
    
function redraw(){
        
        
        alert("hey");
        
        
        
        }




</script>
<style>
body {
    background-color:#fff;
}
</style>
</head>

<body>

<form style="float:left; height:600px; margin-top:30px; margin-left:30px;">
  <fieldset style="height:600px; border:solid 2px black; border-radius:10px;">
    <legend style="font-size:18px; font-family:Arial, Helvetica, sans-serif; font-weight:bold;">Fireplace Surround</legend>
    <br/>
    Mantel width<br/>
    <input type="number" value="280" id="slider"/>
    <br/>
    <br/>
    Jamb Height<br/>
    <input type="number" value="200" id="jambheightSlider"/>
  </fieldset>
</form>
<div id="myCanvas"></div>
<script>

var stage = new Kinetic.Stage
({
    container: myCanvas,
    width:900,
    height: 700
    
    
});

    var layer = new Kinetic.Layer();
    stage.add(layer);
    
</script>
</body>
</html>

问候

亚当

【问题讨论】:

    标签: javascript html canvas html5-canvas kineticjs


    【解决方案1】:

    所以...你有

    function drawSomething(){
    
    
    var imageObj = new Image();
    var leftMantel = new Image();
    var rightMantel = new Image();
    var leftJamb = new Image();
    var rightJamb = new Image();
    var leftFoot = new Image();
    var rightFoot =  new Image();   
    //.... Other stuff
    }
    

    并且您希望变量的范围不是函数本身的本地。简单的修复/破解:

    var imageObj;
    var leftMantel;
    var rightMantel;
    var leftJamb;
    var rightJamb;
    var leftFoot;
    var rightFoot;
    
    function drawSomething(){
       imageObj = new Image();
       leftMantel = new Image();
       rightMantel = new Image();
       leftJamb = new Image();
       rightJamb = new Image();
       leftFoot = new Image();
       rightFoot =  new Image();   
       //.... Other stuff
    }
    

    现在您的函数只是修改现有变量,这些变量可以在函数外部访问。

    【讨论】:

    • 这个快速修复帮助很大,谢谢。实际上是加载函数中的变量产生了影响——我在代码中声明为 Kinetic.Image 对象的变量。因此,我按照您所说的在函数之外声明了它们-然后将它们设为 Kinetic.Images 正常。这使得从函数外部获取图像的宽度()变得更容易。
    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多