1

概要

私の質問には KineticJS の使用が含まれますが、質問する前に、プロジェクトの概要を説明してから、問題について説明します。

タスク

私の仕事は、暖炉のサラウンドのサイズを変更して、その人が数の形式を使用してサラウンドのサイズを変更できるようにすることです。

サラウンドは画像から作成する必要があるため、個別の要素に分割されているため、画像の幅が引き伸ばされてもサラウンド全体は引き伸ばされません。

キャンバスを作成し、このプロジェクトで使用しているフレームワークである KineticJs を参照して、Adobe 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>

よろしく

アダム

4

1 に答える 1

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
}

関数は、関数の外部からアクセスできる既存の変数を変更するだけです。

于 2013-02-25T14:39:29.790 に答える