Показать сообщение отдельно
  #2 (permalink)  
Старый 23.12.2016, 13:18
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Разделить предложение на слова и тем же самым measureText смотреть не слишком ли моного слов в строке

<!DOCTYPE HTML>
<html>
  <body>
    <style>

       html {
      height: 100%;
      overflow: hidden;
    }

    body {
      margin: 0;
      background: linear-gradient(#e1e3e5, #f0f2f4);
    }

    textarea {
      position: absolute;
      background: transparent;
      top: 50%;
      left: 0;
      right: 0;
      outline: 0;
      width: 100%;
      height: 50%;
      border: 0;
      padding: 16px;
      font: 16px Consolas;
      max-width: 600px;
      margin: auto;
      background: linear-gradient(top, #FFFFFF, #EEEEEE 1px, #FFFFFF 25px); 
      box-shadow: rgba(0,0,0, 0.1) 0px 0px 8px; 
    }

    </style>
    <canvas id="myCanvas"></canvas>
    <textarea id="textarea">Аппликатой точки A называется координата этой точки на оси OZ в прямоугольной трёхмерной системе координат. Величина аппликаты точки A равна длине отрезка OD (см. рисунок). Если точка D принадлежит положительной полуоси OZ, то аппликата имеет положительное значение. Если точка D принадлежит отрицательной полуоси OZ, то аппликата имеет отрицательное значение. Если точка A лежит на плоскости XOY, то её аппликата равна нулю. В прямоугольной системе координат ось OZ называется «осью аппликат». Обычно понятие аппликата встречается в теории функции комплексного переменного, где тригонометрические функции теряют периодичность. Поэтому вводится новая ось, называемая аппликатой, по которой откладывается модуль комплексного числа.</textarea>
    <script>
    (function() {
      function wrapText(context, text, x, y, maxWidth, lineHeight) {
        context.clearRect(0, 0, canvas.width, canvas.height);
        var words = text.split(' ');
        var line = '';

        context.font = '16px Consolas';
        context.fillStyle = '#333';

        for(var n = 0; n < words.length; n++) {
          var testLine = line + words[n] + ' ';
          var metrics = context.measureText(testLine);
          var testWidth = metrics.width;
          if (testWidth > maxWidth && n > 0) {
            context.fillText(line, x, y);
            line = words[n] + ' ';
            y += lineHeight;
          }
          else {
            line = testLine;
          }
        }

        context.fillText(line, x, y);
      }
      
      var canvas = document.getElementById('myCanvas');
      var input = document.getElementById('textarea');
      var context = canvas.getContext('2d');
      var maxWidth = 400;
      var lineHeight = 25;
      var text = '';

      function onResize() {
        canvas.width = innerWidth;
        canvas.height = innerHeight / 2;

        maxWidth = Math.min(innerWidth, 600);
      }

      function onInput() {
        text = input.value;
        wrapText(context, text, (canvas.width - maxWidth) / 2, 60, maxWidth, lineHeight);
      }

      document.addEventListener("input", onInput);
      addEventListener("resize", onResize);
      addEventListener("resize", onInput);
      onResize();onInput()
    })();
    </script>
  </body>
</html>

Последний раз редактировалось Malleys, 23.12.2016 в 13:43.
Ответить с цитированием