So, at the top of your code, you can define an interval variable to store the interval in and allow it to be accessible anywhere:
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const effect = $('#canvas'); // <-- you can also define `effect` here since it'll be used in both functions.
let interval = 0;
...
Since you want to hide and show the element, you can create two functions:
- hide(), which will run only if- interval != 0, and it will: (1) stop the interval, (2) set- intervalto 0 so we can check if it was already stopped (so you don't run the function multiple times), and (2) stop the animation and hide the canvas.
- show(), which will run only if- interval == 0, and it will: (1) unhide the canvas, (2) reset the interval.
Now, at the bottom of your code, where you create the interval, you can create the hide and show functions:
hide()
const hide = () => {
  if(interval) {
    clearInterval(interval);
    interval = 0;
    effect.finish().stop().hide() // finish and stop the effect, and hide the canvas
  }
}
show()
const show = () => {
  if(!interval) { // if `interval` is equal to 0
    effect.show()
    interval = setInterval(function () {
      effect.fadeIn(1000, function () {
        effect.fadeOut(1500, function () {
          effect.fadeIn(1500)
        });
      });
    }, 3000);
  }
}
...and, of course, call show() on load:
$(show);
Here's a demo:
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
let interval = 0;
const effect = $('#canvas');
const image = new Image('naturalWidth', 'naturalHeight'); // Using optional size for image
image.onload = drawImageActualSize; // Draw when image has loaded
// Load an image of intrinsic size 300x227 in CSS pixels
image.src = 'https://via.placeholder.com/100'
function drawImageActualSize() {
  // Use the intrinsic size of image in CSS pixels for the canvas element
  canvas.width = this.naturalWidth;
  canvas.height = this.naturalHeight;
  // Will draw the image as 300x227, ignoring the custom size of 60x45
  // given in the constructor
  ctx.drawImage(this, 0, 0);
}
  
const show = () => {
  if(!interval) { // if `interval` is equal to 0
    effect.show()
    interval = setInterval(function () {
      effect.fadeIn(1000, function () {
        effect.fadeOut(1500, function () {
          effect.fadeIn(1500)
        });
      });
    }, 3000);
  }
}
const hide = () => {
  if(interval) {
    clearInterval(interval);
    interval = 0;
    effect.finish().stop().hide() // finish and stop the effect, and hide the canvas
  }
}
$(show);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<canvas id="canvas"></canvas>
<br>
<button onclick="hide()" />Hide</button>
<button onclick="show()" />Show</button>