2015-11-13 9 views
5

ich arbeite auf Stoff js Anwendung & Ich brauche die Schriftgröße zu erhöhen/verringern, wenn wir die Schrift mit der Maus
meines versuchten CodeStoff js: Schrift vergrößert, anstatt nur Skalierung, wenn sie mit der Maus der Größe

der Größe

var canvas = new fabric.Canvas('canvas'); 
 
$(document).ready(function() { 
 
$('#text-font-size').keyup(function() { 
 
     var val = $(this).val(); 
 
     if (isNaN(val)) { 
 
      alert('please enter number'); 
 
      $(this).val(''); 
 
     } 
 
     var activeObject = canvas.getActiveObject(); 
 
     activeObject.fontSize = val; 
 
     canvas.renderAll(); 
 
    }); 
 
    $('#add-text-btn').click(function() { 
 
     if ($('#text-font-size').val()) { 
 
      var txtfontsize = $('#text-font-size').val(); 
 
     } else { 
 
      var txtfontsize = 40; 
 
     } 
 
     var message = $('#add-text-value').val(); 
 
     //var txtfontfamily = $('#font-family').val(); 
 
     var new_text = new fabric.IText(message, { 
 
      left: 100, 
 
      top: 100, 
 
      fontSize: txtfontsize, 
 
      //fontFamily: txtfontfamily, 
 
      fill: '#000' 
 
     }); 
 
     canvas.add(new_text); 
 
     canvas.setActiveObject(new_text); 
 
    }); 
 

 
    canvas.on('object:selected', function(options) { 
 
     if (options.target) { 
 
      $("textarea#add-text-value").val(options.target.text); 
 
      $("#text-font-size").val(options.target.fontSize); 
 
     } 
 
    }); 
 

 
    canvas.on('object:scaling', function(options) { 
 
     if (options.target) { 
 
      $("textarea#add-text-value").val(options.target.text); 
 
      $("#text-font-size").val(options.target.fontSize); 
 
     } 
 
    }); 
 

 
    canvas.on('object:modified', function(options) { 
 
     if (options.target) { 
 
      $("textarea#add-text-value").val(options.target.text); 
 
      $("#text-font-size").val(options.target.fontSize); 
 
     } 
 
    }); 
 

 
});
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="add-text-btn">Add text</button><br><br> 
 
<textarea rows="7" id="add-text-value">Your Text Here</textarea> 
 
<br> 
 
<input id="text-font-size" type="text" class="form-control"> 
 
<canvas id='canvas' width="500" height="400" style="border:#000 1px solid;"></canvas>

aber diese rescale nur der Text nicht die Schriftgröße erhöhen/verringern, aber ich habe die Schriftgröße, um die Größe wie in this

Antwort

8

Die Idee ist, das Ereignis canvas.on ("object: modified") zu verwenden, um die Skalierung auf 1 zurückzusetzen und fontSize auf die neue Größe zu erhöhen.

fabric.Object.lockUniScaling ist eine vorgeschlagene Ergänzung.

var canvas = new fabric.Canvas('canvas'); 
 
$(document).ready(function() { 
 
    $('#text-font-size').keyup(function() { 
 
    var val = $(this).val(); 
 
    if (isNaN(val)) { 
 
     alert('please enter number'); 
 
     $(this).val(''); 
 
    } 
 
    var activeObject = canvas.getActiveObject(); 
 
    activeObject.fontSize = val; 
 
    canvas.renderAll(); 
 
    }); 
 
    $('#add-text-btn').click(function() { 
 
    if ($('#text-font-size').val()) { 
 
     var txtfontsize = $('#text-font-size').val(); 
 
    } else { 
 
     var txtfontsize = 40; 
 
    } 
 
    var message = $('#add-text-value').val(); 
 
    //var txtfontfamily = $('#font-family').val(); 
 
    var new_text = new fabric.IText(message, { 
 
     left: 100, 
 
     top: 100, 
 
     fontSize: txtfontsize, 
 
     lockUniScaling: true, 
 
     //fontFamily: txtfontfamily, 
 
     fill: '#000' 
 
    }); 
 
    canvas.add(new_text); 
 
    canvas.setActiveObject(new_text); 
 
    }); 
 

 
    canvas.on('object:selected', function(options) { 
 
    if (options.target) { 
 
     $("textarea#add-text-value").val(options.target.text); 
 
     $("#text-font-size").val(options.target.fontSize); 
 
    } 
 
    }); 
 

 
    canvas.on('object:scaling', function(event) { 
 
    if (event.target) { 
 
     $("textarea#add-text-value").val(event.target.text); 
 
     $("#text-font-size").val((event.target.fontSize * event.target.scaleX).toFixed(0)); 
 
    } 
 
    }); 
 

 
    canvas.on('object:modified', function(event) { 
 
    if (event.target) { 
 
     event.target.fontSize *= event.target.scaleX; 
 
     event.target.fontSize = event.target.fontSize.toFixed(0); 
 
     event.target.scaleX = 1; 
 
     event.target.scaleY = 1; 
 
     event.target._clearCache(); 
 
     $("textarea#add-text-value").val(event.target.text); 
 
     $("#text-font-size").val(event.target.fontSize); 
 
    } 
 
    }); 
 

 
});
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="add-text-btn">Add text</button> 
 
<br> 
 
<br> 
 
<textarea rows="7" id="add-text-value">Your Text Here</textarea> 
 
<br> 
 
<input id="text-font-size" placeholder="fontsize" type="number" class="form-control"> 
 
<canvas id='canvas' width="500" height="400" style="border:#000 1px solid;"></canvas>

+0

Dank für die Hilfe, jetzt diese auf tatsächliche Schriftgröße funktioniert (einschließlich Dezimalzahlen), können wir Größe Font Zahlen abzurunden hier versucht i mit diesem event.target.fontSize * = Math.round (event.target.scaleX); aber nicht funktioniert [jsfiddle] (http://jsfiddle.net/1jkh7ooo/) – Dinesh

+0

kann man die Skalierung nicht runden, sonst springt man von 40 auf 80 zu 120 ... (Skalierung 1,2,3). Sie müssen die fontSize nach der Multiplikation runden. Siehe aktualisierte Antwort. – AndreaBogazzi

+0

Auch Sie werden ein Problem mit der Objektdimension bemerken, das natürlich springt, aber Sie sollten fabricjs auch mitteilen, dass Sie ein neues Koordinatensystem für das Objekt brauchen. mit setCoords(); – AndreaBogazzi

Verwandte Themen