Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

157
Visualizações
fabric.js and socket.io Whiteboard construction issue

I am attempting to make a whiteboard using fabric.js and socket.io. It works, but after drawing one line, it stops working. I believe that it is looping in the socket.on function and that is causing it to keep adding the same object over and over but I am not sure how to address that.

(function() {
  var socket = io();
  var myid = 0;
  var $ = function(id){return document.getElementById(id)};

  var canvas = this.__canvas = new fabric.Canvas('c', {
    isDrawingMode: true
  });
  var now_color="black";
  var now_width = 1;

  fabric.Object.prototype.transparentCorners = false;

  var drawingModeEl = $('drawing-mode'),
      drawingOptionsEl = $('drawing-mode-options'),
      drawingColorEl = $('drawing-color'),
      drawingLineWidthEl = $('drawing-line-width'),
      clearEl = $('clear-canvas');
      eraseModeEl = $('erase-mode');
      selmode = $('select');
      ermode = $('erase');
      dmode = $('draw');

socket.on('draw', function(path) {
  fabric.util.enlivenObjects([path], function(objects) {
      canvas.add(objects[0]);
  });
});

selmode.onclick = function() {
    select.classList.remove('active');erase.classList.remove('active');draw.classList.remove('active');
    select.classList.add('active');
    canvas.isDrawingMode = false;
}
    
ermode.onclick = function() {
    select.classList.remove('active');erase.classList.remove('active');draw.classList.remove('active');
    erase.classList.add('active');
    canvas.isDrawingMode = true;
    canvas.freeDrawingBrush = new fabric.EraserBrush(canvas);
    canvas.freeDrawingBrush.width = now_width;
}
    
dmode.onclick = function() {
    select.classList.remove('active');erase.classList.remove('active');draw.classList.remove('active');
    draw.classList.add('active');
    canvas.isDrawingMode = true;
    canvas.freeDrawingBrush = new fabric.PencilBrush(canvas);
    canvas.freeDrawingBrush.width = now_width;
    canvas.freeDrawingBrush.color = now_color;
}

var canvasModifiedCallback = function() {

canvas.setActiveObject(canvas.item(myid));
    var what = canvas.getActiveObject();
    socket.emit('draw', what);
    myid++;
    canvas.discardActiveObject();
};

canvas.on('object:added', canvasModifiedCallback);
})();
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda