我正在使用Kinetics.js来操作我的canvas和jQuery来处理用户操作。因此,当我逐一使用它们时,所有功能都可以正常工作。但是,当我尝试将两个函数组合为一个事件,如$('。selections img')。单击........(见下文)该函数只设置背景并忽略文本。但是,创建了文本图层,但由于某种原因我无法看到它。我试图改变函数调用的顺序而没有运气。
当我检查控制台时,没有错误或警告,当我使用console.log检查我的变量时 - 所有这些都打印到控制台。
这可能是什么问题?
PS。这里的目标是保存img和t变量并使用它们: 首先 - 在画布上绘制背景, 第二 - 在单独的图层上的现有背景上打印文本
img = '';
t = '';
function setCanvas (){
hiddenCanvas = new Kinetic.Stage({
container : 'hiddenCanvasHolder',
width : 2340,
height : 1660
});
}
function setBackground (image){
background = new Kinetic.Layer();
var imageObj = new Image();
imageObj.onload = function (){
var backImg = new Kinetic.Image({
x: 0,
y: 0,
image: imageObj,
width: 2340,
height: 1660
});
background.add(backImg);
hiddenCanvas.add(background);
};
imageObj.src = image;
}
function setText(txt){
textLayer = new Kinetic.Layer ();
var text = new Kinetic.Text({
x: 200,
y: 500,
text: txt,
fontSize: 70,
fontFamily: 'Calibri',
fill: '#555',
align: 'center'
});
textLayer.add(text);
hiddenCanvas.add(textLayer);
}
$(document).ready(function(e) {
setCanvas();
setBackground(img);
setText(t);
/* Handles image selection and background setting for canvas */
$('.selections img').click(function(e) {
img = $(this).attr('alt');
textLayer.destroy();
background.destroy();
setBackground(img);
setText(t);
});
/* Handles text input field and text printing to canvas */
$('#print').click(function(e) {
t = $('#quoteInput').val();
background.destroy();
setBackground(img);
textLayer.destroy();
setText(t);
});
/* Handles quote selection from database instead of input it manually */
});
答案 0 :(得分:0)
您在其他功能中需要隐藏在功能范围内的变量。
所以,
更好的资源方法是在层中销毁孩子()而不是破坏图层本身:
background.destroyChildren();
textLayer.destroyChildren();
此外,您将图像路径存储在img的alt属性中。
对于需要该属性以帮助他们理解图像的残疾观众而言,这是不尊重的。
这是代码和小提琴:http://jsfiddle.net/m1erickson/ZFz3z/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Prototype</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.5.4.min.js"></script>
<style>
#container{
border:solid 1px #ccc;
margin-top: 10px;
width:234px;
height:234px;
}
</style>
<script>
$(function(){
var hiddenCanvas = new Kinetic.Stage({
container : 'container',
width : 234,
height : 234
});
var background = new Kinetic.Layer();
hiddenCanvas.add(background);
var textLayer = new Kinetic.Layer();
hiddenCanvas.add(textLayer);
function setBackground (image){
var imageObj = new Image();
imageObj.onload = function (){
var backImg = new Kinetic.Image({
x: 0,
y: 0,
image: imageObj,
width: 234,
height: 234
});
background.destroyChildren();
background.add(backImg);
background.draw();
};
imageObj.src = image;
}
function setText(txt){
var text = new Kinetic.Text({
x: 20,
y: 50,
text: txt,
fontSize: 36,
fontFamily: 'Calibri',
fill: '#555',
align: 'center'
});
textLayer.destroyChildren();
textLayer.add(text);
textLayer.draw();
}
/* Handles image selection and background setting for canvas */
$('.imgs').click(function(e) {
img = $(this).attr('src');
setBackground(img);
});
/* Handles text input field and text printing to canvas */
$('#print').click(function(e) {
t = $('#quoteInput').val();
setText(t);
});
}); // end $(function(){});
</script>
</head>
<body>
<div id="container"></div>
<button id="print">Text</button>
<input id="quoteInput" type="text" value="Hello">
<img class="imgs" src="houseicon.png">
</body>
</html>