Показать сообщение отдельно
  #1 (permalink)  
Старый 15.04.2019, 20:02
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

canvas помогите нарисовать круг
В приложение рисунок который получается в canvas.
Его размеры 600x600 я хочу убрать правую, пустую часть и сделать его 300x600
Но как только я это делаю, рисунок уезжает за приделы видимой части.
Надеюсь понятная моя проблема, помогите пожалуйста ее решить.


<div class="knob">
      <canvas class="knob-canvas" width="300" height="600"></canvas>
    </div>



var canvas;
      var ctx;
      window.addEventListener('load', onLoad);
      function onLoad() {
        canvas = document.querySelector(".knob-canvas");
        ctx = canvas.getContext("2d");
        draw();
      }
      var mouseX = 0;
      var mouseY = 0;

      var r = 250;
      var l = 40;
      var n = 450/1.8;

      function draw() {
        var relativeMouseX = (canvas.width/2) - (canvas.width - mouseX);
        var relativeMouseY = (canvas.height/2) - (canvas.height - mouseY);
        var moused = xyToDeg(relativeMouseX, relativeMouseY);
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        for (var i = 0; i < n; i++) {
          var t = i*(360/n);
          var tr = (degToRad(t-90)) % 360;
          if (t > 330 || t < 200) continue;
          var deltaT = moused - t;
          deltaT = degToRad(deltaT)
          if (moused < (t - 20) || moused > (t + 20)) {
            var deltaR = 0;
          }
          var dl = l;
          if (i % 2 == 0) dl = l/1.1;
          if (Math.round(t) % 45 == 0) dl = 1.15*l;
          var fromX = canvas.width	/ 2 + r * Math.cos(tr);
          var fromY = canvas.height	/ 2 + r * Math.sin(tr);
          var toX = canvas.width	/ 2 + (r + dl + deltaR) * Math.cos(tr);
          var toY = canvas.height	/ 2 + (r + dl + deltaR) * Math.sin(tr);
          ctx.beginPath();
          ctx.moveTo(fromX, fromY);
          ctx.lineTo(toX, toY);
          ctx.lineWidth = 1.5;
          ctx.strokeStyle = 'hsla(' + ((t/2)-130) + ', 100%, 50%, 1)';
          ctx.stroke();
        }
        window.requestAnimationFrame(draw);
      }
      function degToRad(deg) {
        return deg * (Math.PI / 180);
      }
      function xyToDeg(x, y) {
        var d = Math.atan2(x, y) * (180 / Math.PI);
        if (d < 0) {
          d = 180 - d;
        }
        return d;
      }
Изображения:
Тип файла: jpg canvas.jpg (4.3 Кб, 2 просмотров)
Ответить с цитированием