作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题涉及 KineticJS 的使用,但在我提出问题之前 - 我将概述该项目,然后讨论我的问题。
我的任务是创建一个调整大小的壁炉周围,以便所述个人可以使用数字形式来改变周围的大小,唯一真正应该改变的部分是其高度的门柱(两侧的腿)和壁炉架顶部。
现在环绕声需要由图像制成,因此它被分解为单独的元素,因此当图像的宽度被拉伸(stretch)时,整个环绕声不会被拉伸(stretch)。
我创建了 Canvas 并引用了我在该项目中使用的 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>
问候
亚当
最佳答案
所以...你有
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
}
现在您的函数只是修改现有变量,这些变量可以在函数外部访问。
关于javascript - 使用 Kinetic JS 框架重绘图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15064190/
我是一名优秀的程序员,十分优秀!