退格时,从输入文本动态增加字体大小

时间:2018-01-25 09:33:04

标签: javascript jquery html css canvas

在我的代码中,我有一个画布,我可以输入2行文字。当我将文本写入画布(字体大小正在减少)时,我也可以更改它的颜色。因此,当我写入文本输入时,文本大小正在减小,但如果我退格,它不会回到旧的大小。有人可以帮我这个吗?我尝试使用另一个if(宽度<100)并将int更改为+1,但它不起作用。这是JSFiddle代码:https://jsfiddle.net/dk54jb06/8/。我真的很感谢你的帮助!

var canvas2 = document.getElementById("canvas2");
var ctx2 = canvas2.getContext("2d");
var selectedTextFont = "Arial Black";
var selectedFontSize = "20px";
var selectedFontStyle = "bold";
var selectedFontColor = "#000000";

$('#nametag').bind('change keyup input', redrawTextsCan2);
$('#line2').bind('click', redrawTextsCan2);
$('#line3').bind('click', redrawTextsCan2);

function redrawTextsCan2() {

  ctx2.clearRect(0, 0, canvas2.width, canvas2.height);
  ctx2.textAlign = "center";

  ctx2.font = selectedFontStyle + " " + selectedFontSize + " " + selectedTextFont;
  ctx2.fillStyle = selectedFontColor;

  var width = ctx2.measureText($('#line1').val()).width;

  if (width > 100) {
  	var selectedFontSizeInt = (selectedFontSize.replace(/(^\d+)(.+$)/i,'$1') - 1);
    selectedFontSize = '' + selectedFontSizeInt + "px";
    ctx2.font = selectedFontStyle + " " + selectedFontSize + " " + selectedTextFont;
  }
  
  ctx2.fillText($('#line1').val().toUpperCase(), canvas2.width * 0.5, 20);
}

function color2(v4) {
  v4 = v4.dataset.id;
  switch (v4) {
    // top: 103px; left: 210px

    case "black":
      selectedFontColor = '#000000';
      break;

    case "red":
      selectedFontColor = "#ff0000";
      break;

    case "green":
      selectedFontColor = "#009933";
      break;

    case "orange":
      selectedFontColor = "#ff9900";
      break;
  }
  redrawTextsCan2();
}

function chfont3(v3) {
  switch (v3) {
    // top: 103px; left: 210px
    case "arial":
      selectedTextFont = "Arial Black";
      break;

    case "comic":
      selectedTextFont = "Comic Sans MS";
      break;

    case "lucida":
      selectedTextFont = "Lucida Sans";
      break;

    case "franklin":
      selectedTextFont = "Franklin Gothic";
      break;

    case "impact":
      selectedTextFont = "Impact";
      break;
  }
  redrawTextsCan2();
}
#canvas2 {
  border: 2px dotted black;
  border-radius: 5px;
  position: absolute;
}

#canvas3 {
  border: 2px dotted black;
  border-radius: 5px;
  position: absolute;
  top: 220px;
}

#canvas4 {
  border: 2px dotted black;
  border-radius: 5px;
  position: absolute;
}

.green {
  border: 0.1px solid #CCC;
  margin: 1px;
  zoom: 3;
  vertical-align: middle;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  width: 22.5px;
  height: 20px;
  background-color: #009933;
}

.green:hover,
.green:active,
.green:focus {
  border: 1px solid black;
  box-shadow: 1px 1px 2px rgba(255, 255, 255, 0.2);
  opacity: 0.7;
  text-decoration: none;
  text-shadow: -1px -1px 0 #136a65;
  -webkit-transition: all 250ms linear;
  transition: all 250ms linear;
}

.red {
  border: 0.1px solid #CCC;
  margin: 1px;
  zoom: 3;
  vertical-align: middle;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  width: 22.5px;
  height: 20px;
  background-color: #ff0000;
}

.red:hover,
.red:active,
.red:focus {
  border: 1px solid black;
  box-shadow: 1px 1px 2px rgba(255, 255, 255, 0.2);
  opacity: 0.7;
  text-decoration: none;
  text-shadow: -1px -1px 0 #136a65;
  -webkit-transition: all 250ms linear;
  transition: all 250ms linear;
}

.black {
  border: 0.1px solid #CCC;
  margin: 1px;
  zoom: 3;
  vertical-align: middle;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  width: 22.5px;
  height: 20px;
  background-color: black;
}

.black:hover,
.black:active,
.black:focus {
  border: 1px solid black;
  box-shadow: 1px 1px 2px rgba(255, 255, 255, 0.2);
  opacity: 0.7;
  text-decoration: none;
  text-shadow: -1px -1px 0 #136a65;
  -webkit-transition: all 250ms linear;
  transition: all 250ms linear;
}

.orange {
  border: 0.1px solid #CCC;
  margin: 1px;
  zoom: 3;
  vertical-align: middle;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  width: 22.5px;
  height: 20px;
  background-color: orange;
}

.orange:hover,
.orange:active,
.orange:focus {
  border: 1px solid black;
  box-shadow: 1px 1px 2px rgba(255, 255, 255, 0.2);
  opacity: 0.7;
  text-decoration: none;
  text-shadow: -1px -1px 0 #136a65;
  -webkit-transition: all 250ms linear;
  transition: all 250ms linear;
}

@font-face {
  font-family: 'MyFont';
  src: url('https://cdn.rawgit.com/lxc698/CustomizePanel/3817e8da/Standard-Regular.ttf');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3 style="font-size: 15px;padding-top: 0px">Choose Colour</h3>

<button type="button" class="black" data-id="black" onclick="color2(this)"></button>
<button type="button" class="red" data-id="red" onclick="color2(this)"></button>
<button type="button" class="green" data-id="green" onclick="color2(this)"></button>
<button type="button" class="orange" data-id="orange" onclick="color2(this)"></button>
<br>
<br>
<select name="Font" onchange="chfont3(this.value)">
  <option value="arial" selected="selected" style="font-family: Arial Black">ARIAL</option>
  <option value="comic" style="font-family: Comic Sans MS">COMIC SANS MS</option>
  <option value="lucida" style="font-family: Lucida Sans">LUCIDA SANS</option>
  <option value="franklin" style="font-family: Franklin Gothic">FRANKLIN GOTHIC</option>
  <option value="impact" style="font-family: Impact">IMPACT</option>
</select>

<br>
<br>
<form action="" method="POST" id="nametag" class="nametag">
  Line1:
  <input type="text" id="line1" maxlength="22" name="line1" style="width:250px;" />
  <br> Line2:
  <input type="text" id="line2" maxlength="22" name="line1" style="width:250px;" />
  <br>
  <br>
  <canvas width="130px" height="80px" id="canvas2"></canvas>

1 个答案:

答案 0 :(得分:0)

您可以使用e.key属性。

Documentation

传递活动。

redrawTextsCan2(e) {
    if (e.key === 'Backspace') {
        //Calculate the font size.
    }
}

希望有所帮助!