ユーザーがドロップダウンメニューで項目を選択したときに、kineticJSステージ/レイヤー上の既存の画像オブジェクトを新しい画像に置き換えようとしています。以下のコードは機能しますが、画像が#template_selectによって変更された場合、元の画像は削除されているようには見えず、新しい画像が追加されているだけです。
もう一度...どうもありがとうございました、
トッド
KineticJS:
var stage = new Kinetic.Stage({
container: 'tag_canvas',
width: 306,
height: 306
});
var layer = new Kinetic.Layer();
var imageObj = new Image();
var kinetic_common_name = new Kinetic.Text({
x: 30,
y: 40,
text: commonname,
fontSize: commonFontSize,
fontFamily: commonFont,
fill: 'green',
draggable: true
});
var kinetic_botanical_name = new Kinetic.Text({
x: 80,
y: 115,
text: latinname,
fontSize: latinFontSize,
fontFamily: latinFont,
fill: 'green',
draggable: true
});
imageObj.onload = function() {
var template_image = new Kinetic.Image({
x: 0,
y: 0,
image: imageObj,
});
// add the shape to the layer
layer.add(template_image);
layer.add(kinetic_common_name);
layer.add(kinetic_botanical_name);
// add the layer to the stage
stage.add(layer);
contextt.translate(306, 0);
contextt.scale(-1, 1);
contextt.drawImage(newRev, 0, 0);
}; //END imageObj.onload
imageObj.src = getTemplatePath(tag_template);
var canvass = document.getElementById('reverse_tag_canvas');
var contextt = canvass.getContext('2d');
var newRev = layer.getCanvas().getElement();
layer.afterDraw(function(){
contextt.drawImage(newRev, 0, 0); //redraw reverse image
});
//change template
$("#template_select").change(function(){
imageObj.src = getTemplatePath($(this).val());
layer.draw();
});
HTML
Choose a template:
<select id="template_select" name="template_select">
<option value="sm_oval">Small Oval</option>
<option value="lg_oval">Large Oval</option>
<option value="xlg_oval">Extra Large Oval</option>
<option value="hibiscus">Hibiscus</option>
</select>
私は通常、URLを表示するのは好きではありませんが、jsフィドルは動的jsでは機能しないようです。したがって、ここでテンプレート選択メニューを試すことができます:http: //planttagmaker.herobo.com/index copy.php