Horizontal scroll areas with buttons and gradients

This is my code so far:

// Show and hide gradients

$(document).ready(function() {
  $(".scroll-area").each(function(index) {
    if ($(this)[0].scrollWidth <= $(this)[0].clientWidth) {
      $(this).closest(".container").find(".left").css("display", "none");
      $(this).closest(".container").find(".right").css("display", "none");
    } else {
      $(this).scroll(function() {
        if ($(this)[0].scrollWidth > $(this)[0].clientWidth) {
          if ($(this).scrollLeft() > 0) {
            $(this).closest(".container").find(".left").css("display", "block");
          }

          if ($(this).scrollLeft() == 0) {
            $(this).closest(".container").find(".left").css("display", "none");
          }

          var fullWidth = $(this)[0].scrollWidth - $(this)[0].offsetWidth - 1;

          if ($(this).scrollLeft() >= fullWidth) {
            $(this).closest(".container").find(".right").css("display", "none");
          }

          if ($(this).scrollLeft() < fullWidth) {
            $(this).closest(".container").find(".right").css("display", "block");
          }
        }
      });
    }
  });
});


// Scroll buttons

let interval;

$('.scroll-btn').on('mousedown', ({
  target
}) => {
  const type = $(target).attr('id');

  interval = setInterval(() => {
    var x = $('#a').scrollLeft();
    $('#a').scrollLeft(type === 'left-arrow' ? x - 10 : x + 10);
  }, 50);
});

$('.scroll-btn').on('mouseup', () => clearInterval(interval));
* {
  margin: 0;
  padding: 0;
  font-family: sans-serif;
  font-size: 16px;
}

.container {
  width: 550px;
  height: 80px;
  background-color: grey;
  position: relative;
  margin-bottom: 20px;
}

.scroll-area {
  white-space: nowrap;
  overflow-x: auto;
  height: 100%;
}

.left,
.right {
  width: 50px;
  height: 100%;
  position: absolute;
  pointer-events: none;
  top: 0;
}

.left {
  background: linear-gradient(90deg, orange 0%, rgba(0, 0, 0, 0) 100%);
  left: 0;
  display: none;
}

.right {
  background: linear-gradient(-90deg, orange 0%, rgba(0, 0, 0, 0) 100%);
  right: 0;
}

.arrow {
  display: block;
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  width: 15px;
  cursor: pointer;
}

.left-arrow {
  left: 0;
}

.right-arrow {
  right: 0;
}

.left-arrow div,
.right-arrow div {
  font-size: 40px;
}
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

<div class="container">

  <div id="x" class="left"></div>
  <div class="right"></div>

  <div class="arrow left-arrow">
    <div class="scroll-btn" id="left-arrow">
      <</div>
    </div>
    <div class="arrow right-arrow">
      <div class="scroll-btn" id="right-arrow">></div>
    </div>

    <div id="a" class="scroll-area">
      <div class="text">Scroll to right. The gradients and arrows should appear and disappear based on the scroll position. It should work with more than one container. Lorem ipsum.</div>
    </div>
  </div>

The problem now is: I would like to show and hide the arrows in the same way like the gradients. So the left arrow should not be visible in the beginning, but after scrolling. And the right arrow should disappear if the full scroll amount is achieved. And then they should be visible again with scrolling back. If there is not enough text to cause a scrollable area, there should be no gradient and no arrow visible. The problem now is that the classes and ids are mixed in a weird way, and I have no idea how to connect them in a good way. The whole thing should also work with different containers.

Can somebody help me to fix that? I would be super thankful!